@itwin/core-frontend 3.6.0-dev.11 → 3.6.0-dev.14

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 (193) hide show
  1. package/lib/cjs/ViewManager.d.ts.map +1 -1
  2. package/lib/cjs/ViewManager.js +2 -3
  3. package/lib/cjs/ViewManager.js.map +1 -1
  4. package/lib/cjs/Viewport.d.ts +12 -1
  5. package/lib/cjs/Viewport.d.ts.map +1 -1
  6. package/lib/cjs/Viewport.js +24 -1
  7. package/lib/cjs/Viewport.js.map +1 -1
  8. package/lib/cjs/extension/ExtensionRuntime.js +2 -0
  9. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  10. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  11. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  12. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  13. package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
  14. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  15. package/lib/cjs/render/RealityMeshParams.js +9 -3
  16. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  17. package/lib/cjs/render/webgl/BackgroundMapDrape.js +2 -2
  18. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  19. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  21. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  22. package/lib/cjs/render/webgl/DrawCommand.js +3 -3
  23. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  24. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  25. package/lib/cjs/render/webgl/EDL.js +264 -0
  26. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  27. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  28. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  29. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  30. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  31. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  32. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  33. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  35. package/lib/cjs/render/webgl/Layer.js +2 -2
  36. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  37. package/lib/cjs/render/webgl/PlanarClassifier.js +7 -7
  38. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  39. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  40. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  41. package/lib/cjs/render/webgl/PointCloud.js +2 -0
  42. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  43. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  44. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  45. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  46. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  47. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  48. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  50. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  51. package/lib/cjs/render/webgl/RenderCommands.js +30 -30
  52. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  53. package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
  54. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  55. package/lib/cjs/render/webgl/RenderFlags.js +8 -6
  56. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  57. package/lib/cjs/render/webgl/SceneCompositor.d.ts +5 -0
  58. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  59. package/lib/cjs/render/webgl/SceneCompositor.js +192 -73
  60. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  61. package/lib/cjs/render/webgl/SolarShadowMap.js +2 -2
  62. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  63. package/lib/cjs/render/webgl/Target.js +3 -3
  64. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/Technique.js +18 -3
  66. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  67. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  68. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  69. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  70. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  71. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  72. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  73. package/lib/cjs/render/webgl/UniformHandle.js +1 -2
  74. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  75. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  76. package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
  77. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  78. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  79. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  80. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  81. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  82. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  83. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  84. package/lib/cjs/tile/GltfReader.js +1 -1
  85. package/lib/cjs/tile/GltfReader.js.map +1 -1
  86. package/lib/cjs/tile/IModelTile.js +1 -1
  87. package/lib/cjs/tile/IModelTile.js.map +1 -1
  88. package/lib/cjs/tile/ImdlReader.js +5 -5
  89. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  90. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  91. package/lib/cjs/tile/RealityModelTileTree.js +1 -0
  92. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  93. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  94. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  95. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  96. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  97. package/lib/esm/ViewManager.d.ts.map +1 -1
  98. package/lib/esm/ViewManager.js +2 -3
  99. package/lib/esm/ViewManager.js.map +1 -1
  100. package/lib/esm/Viewport.d.ts +12 -1
  101. package/lib/esm/Viewport.d.ts.map +1 -1
  102. package/lib/esm/Viewport.js +24 -1
  103. package/lib/esm/Viewport.js.map +1 -1
  104. package/lib/esm/extension/ExtensionRuntime.js +3 -1
  105. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  106. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  107. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  108. package/lib/esm/render/GraphicBranch.js.map +1 -1
  109. package/lib/esm/render/RealityMeshParams.d.ts +3 -4
  110. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  111. package/lib/esm/render/RealityMeshParams.js +10 -4
  112. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  113. package/lib/esm/render/webgl/BackgroundMapDrape.js +2 -2
  114. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  115. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  116. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  117. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  118. package/lib/esm/render/webgl/DrawCommand.js +3 -3
  119. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  120. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  121. package/lib/esm/render/webgl/EDL.js +260 -0
  122. package/lib/esm/render/webgl/EDL.js.map +1 -0
  123. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  124. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  125. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  126. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  127. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  128. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  129. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  130. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  131. package/lib/esm/render/webgl/Layer.js +2 -2
  132. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  133. package/lib/esm/render/webgl/PlanarClassifier.js +7 -7
  134. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  135. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  136. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  137. package/lib/esm/render/webgl/PointCloud.js +2 -0
  138. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  139. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  140. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  142. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  143. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  144. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  145. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  146. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  147. package/lib/esm/render/webgl/RenderCommands.js +30 -30
  148. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  149. package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
  150. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  151. package/lib/esm/render/webgl/RenderFlags.js +8 -6
  152. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  153. package/lib/esm/render/webgl/SceneCompositor.d.ts +5 -0
  154. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  155. package/lib/esm/render/webgl/SceneCompositor.js +191 -74
  156. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  157. package/lib/esm/render/webgl/SolarShadowMap.js +2 -2
  158. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  159. package/lib/esm/render/webgl/Target.js +3 -3
  160. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  161. package/lib/esm/render/webgl/Technique.js +18 -3
  162. package/lib/esm/render/webgl/Technique.js.map +1 -1
  163. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  164. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  165. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  166. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  167. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  168. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  169. package/lib/esm/render/webgl/UniformHandle.js +1 -2
  170. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  171. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  172. package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
  173. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  174. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  175. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  176. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  177. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  178. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  179. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  180. package/lib/esm/tile/GltfReader.js +1 -1
  181. package/lib/esm/tile/GltfReader.js.map +1 -1
  182. package/lib/esm/tile/IModelTile.js +1 -1
  183. package/lib/esm/tile/IModelTile.js.map +1 -1
  184. package/lib/esm/tile/ImdlReader.js +5 -5
  185. package/lib/esm/tile/ImdlReader.js.map +1 -1
  186. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  187. package/lib/esm/tile/RealityModelTileTree.js +1 -0
  188. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  189. package/lib/esm/tile/RealityTileLoader.js +2 -2
  190. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  191. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  192. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  193. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.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 { RenderMode } from \"@itwin/core-common\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Specifies how a TechniqueFlags handles feature table/overrides.\r\n * @internal\r\n */\r\nexport const enum FeatureMode {\r\n None, // no features\r\n Pick, // feature table only\r\n Overrides, // feature table with symbology overrides\r\n}\r\n\r\n/** @internal */\r\nexport const enum IsInstanced { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsAnimated { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsClassified { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsEdgeTestNeeded { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsShadowable { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsThematic { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsWiremesh { No, Yes }\r\n\r\n/** @internal */\r\nexport type PositionType = \"quantized\" | \"unquantized\";\r\n\r\n/** Flags used to control which shader program is used by a rendering Technique.\r\n * @internal\r\n */\r\nexport class TechniqueFlags {\r\n public numClipPlanes = 0;\r\n public featureMode = FeatureMode.None;\r\n public isTranslucent: boolean;\r\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n public isAnimated: IsAnimated = IsAnimated.No;\r\n public isInstanced: IsInstanced = IsInstanced.No;\r\n public isClassified: IsClassified = IsClassified.No;\r\n public isShadowable: IsShadowable = IsShadowable.No;\r\n public isThematic: IsThematic = IsThematic.No;\r\n public isWiremesh: IsWiremesh = IsWiremesh.No;\r\n public positionType: PositionType = \"quantized\";\r\n private _isHilite = false;\r\n\r\n public constructor(translucent: boolean = false) {\r\n this.isTranslucent = translucent;\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.numClipPlanes > 0;\r\n }\r\n\r\n public get usesQuantizedPositions(): boolean {\r\n return \"quantized\" === this.positionType;\r\n }\r\n\r\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\"): void {\r\n const clipStack = target.uniforms.branch.clipStack;\r\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\r\n this.positionType = posType;\r\n\r\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\r\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\r\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\r\n } else {\r\n this._isHilite = false;\r\n this.isTranslucent = RenderPass.Translucent === pass;\r\n this.numClipPlanes = numClipPlanes;\r\n this.isAnimated = animated;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = wiremesh;\r\n this.featureMode = target.uniforms.batch.featureMode;\r\n\r\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\r\n // These are only useful if the geometry defines feature Ids.\r\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\r\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\r\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\r\n switch (target.currentViewFlags.renderMode) {\r\n case RenderMode.Wireframe:\r\n // We're only displaying edges (ignoring filled planar regions)\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n break;\r\n case RenderMode.SmoothShade:\r\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\r\n // We're only displaying surfaces (ignoring filled planar regions).\r\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n }\r\n break;\r\n default:\r\n // SolidFill and HiddenLine always display edges and surfaces.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\r\n this._isHilite = false;\r\n this.featureMode = mode;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isClassified = IsClassified.No;\r\n this.isInstanced = instanced;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = IsWiremesh.No;\r\n this.positionType = posType;\r\n this.numClipPlanes = 0;\r\n }\r\n\r\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\r\n\r\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\r\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\r\n public setClassified(classified: boolean) {\r\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\r\n }\r\n\r\n public get isHilite() { return this._isHilite; }\r\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\r\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\r\n this._isHilite = true;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.numClipPlanes = numClipPlanes;\r\n this.positionType = posType;\r\n }\r\n\r\n public equals(other: TechniqueFlags): boolean {\r\n return this.numClipPlanes === other.numClipPlanes\r\n && this.featureMode === other.featureMode\r\n && this.isTranslucent === other.isTranslucent\r\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\r\n && this.isAnimated === other.isAnimated\r\n && this.isInstanced === other.isInstanced\r\n && this.isClassified === other.isClassified\r\n && this.isShadowable === other.isShadowable\r\n && this.isThematic === other.isThematic\r\n && this.isWiremesh === other.isWiremesh\r\n && this.positionType === other.positionType\r\n && this.isHilite === other.isHilite;\r\n }\r\n\r\n public buildDescription(): string {\r\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\r\n if (this.isInstanced)\r\n parts.push(\"Instanced\");\r\n if (this.isEdgeTestNeeded)\r\n parts.push(\"EdgeTestNeeded\");\r\n if (this.isAnimated)\r\n parts.push(\"Animated\");\r\n if (this.isHilite)\r\n parts.push(\"Hilite\");\r\n if (this.isClassified)\r\n parts.push(\"Classified\");\r\n if (this.hasClip)\r\n parts.push(\"Clip\");\r\n if (this.isShadowable)\r\n parts.push(\"Shadowable\");\r\n if (this.isThematic)\r\n parts.push(\"Thematic\");\r\n if (this.hasFeatures)\r\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\r\n if (this.isWiremesh)\r\n parts.push(\"Wiremesh\");\r\n if (this.positionType === \"unquantized\")\r\n parts.push(\"Unquantized\");\r\n\r\n return parts.join(\"-\");\r\n }\r\n\r\n public static fromDescription(description: string): TechniqueFlags {\r\n const flags = new TechniqueFlags(false);\r\n const parts = description.split(\"-\");\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"Translucent\":\r\n flags.isTranslucent = true;\r\n break;\r\n case \"Instanced\":\r\n flags.isInstanced = IsInstanced.Yes;\r\n break;\r\n case \"EdgeTestNeeded\":\r\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\r\n break;\r\n case \"Animated\":\r\n flags.isAnimated = IsAnimated.Yes;\r\n break;\r\n case \"Hilite\":\r\n flags._isHilite = true;\r\n break;\r\n case \"Classified\":\r\n flags.isClassified = IsClassified.Yes;\r\n break;\r\n case \"Clip\":\r\n flags.numClipPlanes = 1;\r\n break;\r\n case \"Shadowable\":\r\n flags.isShadowable = IsShadowable.Yes;\r\n break;\r\n case \"Thematic\":\r\n flags.isThematic = IsThematic.Yes;\r\n break;\r\n case \"Wiremesh\":\r\n flags.isWiremesh = IsWiremesh.Yes;\r\n break;\r\n case \"Unquantized\":\r\n flags.positionType = \"unquantized\";\r\n break;\r\n case \"Pick\":\r\n flags.featureMode = FeatureMode.Pick;\r\n break;\r\n case \"Overrides\":\r\n flags.featureMode = FeatureMode.Overrides;\r\n break;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n public static readonly defaults = new TechniqueFlags();\r\n}\r\n"]}
1
+ {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.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 { RenderMode } from \"@itwin/core-common\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Specifies how a TechniqueFlags handles feature table/overrides.\r\n * @internal\r\n */\r\nexport const enum FeatureMode {\r\n None, // no features\r\n Pick, // feature table only\r\n Overrides, // feature table with symbology overrides\r\n}\r\n\r\n/** @internal */\r\nexport const enum IsInstanced { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsAnimated { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsClassified { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsEdgeTestNeeded { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsShadowable { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsThematic { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsWiremesh { No, Yes }\r\n\r\n/** @internal */\r\nexport type PositionType = \"quantized\" | \"unquantized\";\r\n\r\n/** Flags used to control which shader program is used by a rendering Technique.\r\n * @internal\r\n */\r\nexport class TechniqueFlags {\r\n public numClipPlanes = 0;\r\n public featureMode = FeatureMode.None;\r\n public isTranslucent: boolean;\r\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n public isAnimated: IsAnimated = IsAnimated.No;\r\n public isInstanced: IsInstanced = IsInstanced.No;\r\n public isClassified: IsClassified = IsClassified.No;\r\n public isShadowable: IsShadowable = IsShadowable.No;\r\n public isThematic: IsThematic = IsThematic.No;\r\n public isWiremesh: IsWiremesh = IsWiremesh.No;\r\n public positionType: PositionType = \"quantized\";\r\n private _isHilite = false;\r\n\r\n public constructor(translucent: boolean = false) {\r\n this.isTranslucent = translucent;\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.numClipPlanes > 0;\r\n }\r\n\r\n public get usesQuantizedPositions(): boolean {\r\n return \"quantized\" === this.positionType;\r\n }\r\n\r\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\"): void {\r\n const clipStack = target.uniforms.branch.clipStack;\r\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\r\n this.positionType = posType;\r\n\r\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\r\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\r\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\r\n } else {\r\n this._isHilite = false;\r\n this.isTranslucent = RenderPass.Translucent === pass;\r\n this.numClipPlanes = numClipPlanes;\r\n this.isAnimated = animated;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = wiremesh;\r\n this.featureMode = target.uniforms.batch.featureMode;\r\n\r\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\r\n // These are only useful if the geometry defines feature Ids.\r\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\r\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\r\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\r\n switch (target.currentViewFlags.renderMode) {\r\n case RenderMode.Wireframe:\r\n // We're only displaying edges (ignoring filled planar regions)\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n break;\r\n case RenderMode.SmoothShade:\r\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\r\n // We're only displaying surfaces (ignoring filled planar regions).\r\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n }\r\n break;\r\n default:\r\n // SolidFill and HiddenLine always display edges and surfaces.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\r\n this._isHilite = false;\r\n this.featureMode = mode;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isClassified = IsClassified.No;\r\n this.isInstanced = instanced;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = IsWiremesh.No;\r\n this.positionType = posType;\r\n this.numClipPlanes = 0;\r\n }\r\n\r\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\r\n\r\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\r\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\r\n public setClassified(classified: boolean) {\r\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\r\n }\r\n\r\n public get isHilite() { return this._isHilite; }\r\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\r\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\r\n this._isHilite = true;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.numClipPlanes = numClipPlanes;\r\n this.positionType = posType;\r\n }\r\n\r\n public equals(other: TechniqueFlags): boolean {\r\n return this.numClipPlanes === other.numClipPlanes\r\n && this.featureMode === other.featureMode\r\n && this.isTranslucent === other.isTranslucent\r\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\r\n && this.isAnimated === other.isAnimated\r\n && this.isInstanced === other.isInstanced\r\n && this.isClassified === other.isClassified\r\n && this.isShadowable === other.isShadowable\r\n && this.isThematic === other.isThematic\r\n && this.isWiremesh === other.isWiremesh\r\n && this.positionType === other.positionType\r\n && this.isHilite === other.isHilite;\r\n }\r\n\r\n public buildDescription(): string {\r\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\r\n if (this.isInstanced)\r\n parts.push(\"Instanced\");\r\n if (this.isEdgeTestNeeded)\r\n parts.push(\"EdgeTestNeeded\");\r\n if (this.isAnimated)\r\n parts.push(\"Animated\");\r\n if (this.isHilite)\r\n parts.push(\"Hilite\");\r\n if (this.isClassified)\r\n parts.push(\"Classified\");\r\n if (this.hasClip)\r\n parts.push(\"Clip\");\r\n if (this.isShadowable)\r\n parts.push(\"Shadowable\");\r\n if (this.isThematic)\r\n parts.push(\"Thematic\");\r\n if (this.hasFeatures)\r\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\r\n if (this.isWiremesh)\r\n parts.push(\"Wiremesh\");\r\n if (this.positionType === \"unquantized\")\r\n parts.push(\"Unquantized\");\r\n\r\n return parts.join(\"-\");\r\n }\r\n\r\n public static fromDescription(description: string): TechniqueFlags {\r\n const flags = new TechniqueFlags(false);\r\n const parts = description.split(\"-\");\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"Translucent\":\r\n flags.isTranslucent = true;\r\n break;\r\n case \"Instanced\":\r\n flags.isInstanced = IsInstanced.Yes;\r\n break;\r\n case \"EdgeTestNeeded\":\r\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\r\n break;\r\n case \"Animated\":\r\n flags.isAnimated = IsAnimated.Yes;\r\n break;\r\n case \"Hilite\":\r\n flags._isHilite = true;\r\n break;\r\n case \"Classified\":\r\n flags.isClassified = IsClassified.Yes;\r\n break;\r\n case \"Clip\":\r\n flags.numClipPlanes = 1;\r\n break;\r\n case \"Shadowable\":\r\n flags.isShadowable = IsShadowable.Yes;\r\n break;\r\n case \"Thematic\":\r\n flags.isThematic = IsThematic.Yes;\r\n break;\r\n case \"Wiremesh\":\r\n flags.isWiremesh = IsWiremesh.Yes;\r\n break;\r\n case \"Unquantized\":\r\n flags.positionType = \"unquantized\";\r\n break;\r\n case \"Pick\":\r\n flags.featureMode = FeatureMode.Pick;\r\n break;\r\n case \"Overrides\":\r\n flags.featureMode = FeatureMode.Overrides;\r\n break;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n public static readonly defaults = new TechniqueFlags();\r\n}\r\n"]}
@@ -41,8 +41,12 @@ export declare const enum TechniqueId {
41
41
  VolClassCopyZ = 31,
42
42
  VolClassSetBlend = 32,
43
43
  VolClassBlend = 33,
44
- NumBuiltIn = 34,
45
- COUNT = 34
44
+ EDLCalcBasic = 34,
45
+ EDLCalcFull = 35,
46
+ EDLFilter = 36,
47
+ EDLMix = 37,
48
+ NumBuiltIn = 38,
49
+ COUNT = 38
46
50
  }
47
51
  /** @internal */
48
52
  export declare function computeCompositeTechniqueId(flags: CompositeFlags): TechniqueId;
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueId.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;GAEG;AACH,0BAAkB,WAAW;IAE3B,OAAO,KAAK;IACZ,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,UAAU,IAAA;IACV,WAAW,IAAA;IACX,IAAI,IAAA;IACJ,cAAc,IAAA;IACd,WAAW,IAAA;IACX,WAAW,IAAA;IACX,UAAU,IAAA;IAGV,eAAe,IAAA;IACf,oBAAoB,KAAA;IACpB,6BAA6B,KAAA;IAC7B,kBAAkB,KAAA;IAClB,gCAAgC,KAAA;IAChC,2BAA2B,KAAA;IAC3B,YAAY,KAAA;IACZ,mBAAmB,KAAA;IACnB,eAAe,KAAA;IACf,SAAS,KAAA;IACT,gBAAgB,KAAA;IAChB,yBAAyB,KAAA;IACzB,iBAAiB,KAAA;IACjB,aAAa,KAAA;IACb,MAAM,KAAA;IACN,iBAAiB,KAAA;IACjB,gBAAgB,KAAA;IAChB,gBAAgB,KAAA;IAChB,IAAI,KAAA;IACJ,aAAa,KAAA;IACb,eAAe,KAAA;IACf,gBAAgB,KAAA;IAChB,aAAa,KAAA;IACb,gBAAgB,KAAA;IAChB,aAAa,KAAA;IAEb,UAAU,KAAA;IACV,KAAK,KAAa;CACnB;AAaD,gBAAgB;AAChB,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,CAG9E"}
1
+ {"version":3,"file":"TechniqueId.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;GAEG;AACH,0BAAkB,WAAW;IAE3B,OAAO,KAAK;IACZ,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,UAAU,IAAA;IACV,WAAW,IAAA;IACX,IAAI,IAAA;IACJ,cAAc,IAAA;IACd,WAAW,IAAA;IACX,WAAW,IAAA;IACX,UAAU,IAAA;IAGV,eAAe,IAAA;IACf,oBAAoB,KAAA;IACpB,6BAA6B,KAAA;IAC7B,kBAAkB,KAAA;IAClB,gCAAgC,KAAA;IAChC,2BAA2B,KAAA;IAC3B,YAAY,KAAA;IACZ,mBAAmB,KAAA;IACnB,eAAe,KAAA;IACf,SAAS,KAAA;IACT,gBAAgB,KAAA;IAChB,yBAAyB,KAAA;IACzB,iBAAiB,KAAA;IACjB,aAAa,KAAA;IACb,MAAM,KAAA;IACN,iBAAiB,KAAA;IACjB,gBAAgB,KAAA;IAChB,gBAAgB,KAAA;IAChB,IAAI,KAAA;IACJ,aAAa,KAAA;IACb,eAAe,KAAA;IACf,gBAAgB,KAAA;IAChB,aAAa,KAAA;IACb,gBAAgB,KAAA;IAChB,aAAa,KAAA;IACb,YAAY,KAAA;IACZ,WAAW,KAAA;IACX,SAAS,KAAA;IACT,MAAM,KAAA;IAEN,UAAU,KAAA;IACV,KAAK,KAAa;CACnB;AAaD,gBAAgB;AAChB,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,CAG9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueId.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAoD7C,MAAM,qBAAqB,GAAG;;;;;;;;2BAQF,4DAA4D;CACvF,CAAC;AAEF,gBAAgB;AAChB,SAAgB,2BAA2B,CAAC,KAAqB;IAC/D,IAAA,qBAAM,EAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACjC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAHD,kEAGC","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 { CompositeFlags } from \"./RenderFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Technique enumeration\r\n * @internal\r\n */\r\nexport const enum TechniqueId {\r\n // Techniques with many different variations\r\n Invalid = -1,\r\n Surface,\r\n Polyline,\r\n PointCloud,\r\n PointString,\r\n Edge,\r\n SilhouetteEdge,\r\n IndexedEdge,\r\n RealityMesh,\r\n PlanarGrid,\r\n\r\n // Techniques with a single associated shader that operates on the entire image\r\n CompositeHilite,\r\n CompositeTranslucent,\r\n CompositeHiliteAndTranslucent,\r\n CompositeOcclusion,\r\n CompositeTranslucentAndOcclusion,\r\n CompositeHiliteAndOcclusion,\r\n CompositeAll,\r\n OITClearTranslucent,\r\n CopyPickBuffers,\r\n CopyColor,\r\n CopyColorNoAlpha,\r\n VolClassColorUsingStencil,\r\n ClearPickAndColor,\r\n EVSMFromDepth,\r\n SkyBox,\r\n SkySphereGradient,\r\n SkySphereTexture,\r\n AmbientOcclusion,\r\n Blur,\r\n BlurTestOrder,\r\n CombineTextures,\r\n Combine3Textures,\r\n VolClassCopyZ,\r\n VolClassSetBlend,\r\n VolClassBlend,\r\n\r\n NumBuiltIn,\r\n COUNT = NumBuiltIn,\r\n}\r\n\r\nconst compositeTechniqueIds = [\r\n TechniqueId.Invalid, // None = 0\r\n TechniqueId.CompositeTranslucent, // Translucent == 1 << 0\r\n TechniqueId.CompositeHilite, // Hilite == 1 << 1 == 2\r\n TechniqueId.CompositeHiliteAndTranslucent, // Hilite | Translucent == 1 | 2 == 3\r\n TechniqueId.CompositeOcclusion, // AmbientOcclusion == 1 << 2 == 4\r\n TechniqueId.CompositeTranslucentAndOcclusion, // Translucent | AmbientOcclusion == 1 | 4 == 5\r\n TechniqueId.CompositeHiliteAndOcclusion, // Hilite | AmbientOcclusion == 2 | 4 == 6\r\n TechniqueId.CompositeAll, // Translucent | Hilite | AmbientOcclusion == 1 | 2 | 4 == 7\r\n];\r\n\r\n/** @internal */\r\nexport function computeCompositeTechniqueId(flags: CompositeFlags): TechniqueId {\r\n assert(flags >= 0 && flags <= 7);\r\n return compositeTechniqueIds[flags];\r\n}\r\n"]}
1
+ {"version":3,"file":"TechniqueId.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAwD7C,MAAM,qBAAqB,GAAG;;;;;;;;2BAQF,4DAA4D;CACvF,CAAC;AAEF,gBAAgB;AAChB,SAAgB,2BAA2B,CAAC,KAAqB;IAC/D,IAAA,qBAAM,EAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACjC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAHD,kEAGC","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 { CompositeFlags } from \"./RenderFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Technique enumeration\r\n * @internal\r\n */\r\nexport const enum TechniqueId {\r\n // Techniques with many different variations\r\n Invalid = -1,\r\n Surface,\r\n Polyline,\r\n PointCloud,\r\n PointString,\r\n Edge,\r\n SilhouetteEdge,\r\n IndexedEdge,\r\n RealityMesh,\r\n PlanarGrid,\r\n\r\n // Techniques with a single associated shader that operates on the entire image\r\n CompositeHilite,\r\n CompositeTranslucent,\r\n CompositeHiliteAndTranslucent,\r\n CompositeOcclusion,\r\n CompositeTranslucentAndOcclusion,\r\n CompositeHiliteAndOcclusion,\r\n CompositeAll,\r\n OITClearTranslucent,\r\n CopyPickBuffers,\r\n CopyColor,\r\n CopyColorNoAlpha,\r\n VolClassColorUsingStencil,\r\n ClearPickAndColor,\r\n EVSMFromDepth,\r\n SkyBox,\r\n SkySphereGradient,\r\n SkySphereTexture,\r\n AmbientOcclusion,\r\n Blur,\r\n BlurTestOrder,\r\n CombineTextures,\r\n Combine3Textures,\r\n VolClassCopyZ,\r\n VolClassSetBlend,\r\n VolClassBlend,\r\n EDLCalcBasic,\r\n EDLCalcFull,\r\n EDLFilter,\r\n EDLMix,\r\n\r\n NumBuiltIn,\r\n COUNT = NumBuiltIn,\r\n}\r\n\r\nconst compositeTechniqueIds = [\r\n TechniqueId.Invalid, // None = 0\r\n TechniqueId.CompositeTranslucent, // Translucent == 1 << 0\r\n TechniqueId.CompositeHilite, // Hilite == 1 << 1 == 2\r\n TechniqueId.CompositeHiliteAndTranslucent, // Hilite | Translucent == 1 | 2 == 3\r\n TechniqueId.CompositeOcclusion, // AmbientOcclusion == 1 << 2 == 4\r\n TechniqueId.CompositeTranslucentAndOcclusion, // Translucent | AmbientOcclusion == 1 | 4 == 5\r\n TechniqueId.CompositeHiliteAndOcclusion, // Hilite | AmbientOcclusion == 2 | 4 == 6\r\n TechniqueId.CompositeAll, // Translucent | Hilite | AmbientOcclusion == 1 | 2 | 4 == 7\r\n];\r\n\r\n/** @internal */\r\nexport function computeCompositeTechniqueId(flags: CompositeFlags): TechniqueId {\r\n assert(flags >= 0 && flags <= 7);\r\n return compositeTechniqueIds[flags];\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAMvC"}
1
+ {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAMvC"}
@@ -9,7 +9,6 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.UniformHandle = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
- const Logger_1 = require("@itwin/core-bentley/lib/cjs/Logger");
13
12
  const FrontendLoggerCategory_1 = require("../../FrontendLoggerCategory");
14
13
  const System_1 = require("./System");
15
14
  /** A handle to the location of a uniform within a shader program
@@ -32,7 +31,7 @@ class UniformHandle {
32
31
  throw new Error(errMsg);
33
32
  }
34
33
  else {
35
- Logger_1.Logger.logError(FrontendLoggerCategory_1.FrontendLoggerCategory.Render, errMsg);
34
+ core_bentley_1.Logger.logError(FrontendLoggerCategory_1.FrontendLoggerCategory.Render, errMsg);
36
35
  }
37
36
  }
38
37
  return new UniformHandle(location);
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Logger } from \"@itwin/core-bentley/lib/cjs/Logger\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, Logger } from \"@itwin/core-bentley\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
@@ -28,14 +28,14 @@ class VisibleTileFeatures {
28
28
  }
29
29
  exports.VisibleTileFeatures = VisibleTileFeatures;
30
30
  const clippedPasses = [
31
- 14 /* BackgroundMap */,
31
+ 15 /* BackgroundMap */,
32
32
  1 /* OpaqueLayers */,
33
33
  2 /* OpaqueLinear */,
34
34
  3 /* OpaquePlanar */,
35
- 4 /* OpaqueGeneral */,
36
- 6 /* TranslucentLayers */,
37
- 7 /* Translucent */,
38
- 10 /* OverlayLayers */,
35
+ 5 /* OpaqueGeneral */,
36
+ 7 /* TranslucentLayers */,
37
+ 8 /* Translucent */,
38
+ 11 /* OverlayLayers */,
39
39
  ];
40
40
  function isFeatureVisible(feature, target, modelIdParts, includeNonLocatable) {
41
41
  const ovrs = target.currentFeatureSymbologyOverrides;
@@ -0,0 +1,14 @@
1
+ /** @packageDocumentation
2
+ * @module WebGL
3
+ */
4
+ import { WebGLContext } from "@itwin/webgl-compatibility";
5
+ import { ShaderProgram } from "../ShaderProgram";
6
+ /** @internal */
7
+ export declare function createEDLCalcBasicProgram(context: WebGLContext): ShaderProgram;
8
+ /** @internal */
9
+ export declare function createEDLCalcFullProgram(context: WebGLContext): ShaderProgram;
10
+ /** @internal */
11
+ export declare function createEDLFilterProgram(context: WebGLContext): ShaderProgram;
12
+ /** @internal */
13
+ export declare function createEDLMixProgram(context: WebGLContext): ShaderProgram;
14
+ //# sourceMappingURL=EDL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EDL.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqCjD,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuC9E;AAmCD,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuC7E;AAwCD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAgC3E;AAcD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuCxE"}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module WebGL
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createEDLMixProgram = exports.createEDLFilterProgram = exports.createEDLCalcFullProgram = exports.createEDLCalcBasicProgram = void 0;
11
+ const RenderFlags_1 = require("../RenderFlags");
12
+ const Texture_1 = require("../Texture");
13
+ const Fragment_1 = require("./Fragment");
14
+ const ViewportQuad_1 = require("./ViewportQuad");
15
+ // This shader calculates a more basic version of EDL, and only for the original size, so single pass
16
+ const calcBasicEDL = `
17
+ float strength = u_pointCloudEDL1.x;
18
+ float scaleFactor = u_pointCloudEDL1.z;
19
+ float pixRadius = u_pointCloudEDL1.y;
20
+ vec2 invTexSize = u_texInfo.xy;
21
+ float is3d = u_pointCloudEDL1.w;
22
+
23
+ vec4 color = TEXTURE(u_colorTexture, v_texCoord);
24
+ if (color.a == 0.0)
25
+ discard;
26
+ else {
27
+ const vec2 neighbors[8] = vec2[8] ( //neighbor relative position
28
+ vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),
29
+ vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));
30
+ float depth = TEXTURE(u_depthTexture, v_texCoord).r;
31
+ float sum = 0.0;
32
+ vec2 posScale = pixRadius * invTexSize;
33
+ // contribution of each neighbor
34
+ // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud
35
+ for (int c = 0; c < 8; c++) {
36
+ vec2 nRelPos = posScale * neighbors[c];
37
+ vec2 nPos = v_texCoord + nRelPos;
38
+ float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth
39
+ sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));
40
+ }
41
+ float f = sum / 8.0;
42
+ f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5
43
+ return vec4(f * color.rgb, 1.0);
44
+ }
45
+ `;
46
+ /** @internal */
47
+ function createEDLCalcBasicProgram(context) {
48
+ const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(true);
49
+ const frag = builder.frag;
50
+ frag.set(1 /* ComputeBaseColor */, calcBasicEDL);
51
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
52
+ frag.addUniform("u_texInfo", 4 /* Vec3 */, (prog) => {
53
+ prog.addGraphicUniform("u_texInfo", (uniform, params) => {
54
+ const geom = params.geometry;
55
+ uniform.setUniform3fv(geom.texInfo);
56
+ });
57
+ });
58
+ frag.addUniform("u_colorTexture", 8 /* Sampler2D */, (prog) => {
59
+ prog.addGraphicUniform("u_colorTexture", (uniform, params) => {
60
+ const geom = params.geometry;
61
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture, RenderFlags_1.TextureUnit.Zero);
62
+ });
63
+ });
64
+ frag.addUniform("u_depthTexture", 8 /* Sampler2D */, (prog) => {
65
+ prog.addGraphicUniform("u_depthTexture", (uniform, params) => {
66
+ const geom = params.geometry;
67
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.depthTexture, RenderFlags_1.TextureUnit.One);
68
+ });
69
+ });
70
+ // Uniforms based on the PointCloudDisplaySettings.
71
+ frag.addUniform("u_pointCloudEDL1", 5 /* Vec4 */, (prog) => {
72
+ prog.addGraphicUniform("u_pointCloudEDL1", (uniform, params) => {
73
+ params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);
74
+ });
75
+ });
76
+ builder.vert.headerComment = "//!V! EDLCalcBasic";
77
+ builder.frag.headerComment = "//!F! EDLCalcBasic";
78
+ return builder.buildProgram(context);
79
+ }
80
+ exports.createEDLCalcBasicProgram = createEDLCalcBasicProgram;
81
+ // This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale
82
+ const calcFullEDL = `
83
+ float strength = u_pointCloudEDL1.x;
84
+ float scaleFactor = u_pointCloudEDL1.z;
85
+ float pixRadius = u_pointCloudEDL1.y;
86
+ float scale = u_texInfo.z; // 1, 2, 4
87
+ vec2 invTexSize = u_texInfo.xy;
88
+ float is3d = u_pointCloudEDL1.w;
89
+
90
+ vec4 color = TEXTURE(u_colorTexture, v_texCoord);
91
+ if (color.a == 0.0)
92
+ return color;
93
+ else {
94
+ const vec2 neighbors[8] = vec2[8] ( //neighbor relative position
95
+ vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),
96
+ vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));
97
+ float depth = TEXTURE(u_depthTexture, v_texCoord).r;
98
+ float sum = 0.0;
99
+ vec2 posScale = pixRadius * invTexSize;
100
+ // contribution of each neighbor
101
+ // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud
102
+ for (int c = 0; c < 8; c++) {
103
+ vec2 nRelPos = posScale * neighbors[c];
104
+ vec2 nPos = v_texCoord + nRelPos;
105
+ float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth
106
+ sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;
107
+ }
108
+ float f = sum / 8.0;
109
+ f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5
110
+ return vec4(f * color.rgb, 1.0);
111
+ }
112
+ `;
113
+ /** @internal */
114
+ function createEDLCalcFullProgram(context) {
115
+ const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(true);
116
+ const frag = builder.frag;
117
+ frag.set(1 /* ComputeBaseColor */, calcFullEDL);
118
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
119
+ frag.addUniform("u_texInfo", 4 /* Vec3 */, (prog) => {
120
+ prog.addGraphicUniform("u_texInfo", (uniform, params) => {
121
+ const geom = params.geometry;
122
+ uniform.setUniform3fv(geom.texInfo);
123
+ });
124
+ });
125
+ frag.addUniform("u_colorTexture", 8 /* Sampler2D */, (prog) => {
126
+ prog.addGraphicUniform("u_colorTexture", (uniform, params) => {
127
+ const geom = params.geometry;
128
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture, RenderFlags_1.TextureUnit.Zero);
129
+ });
130
+ });
131
+ frag.addUniform("u_depthTexture", 8 /* Sampler2D */, (prog) => {
132
+ prog.addGraphicUniform("u_depthTexture", (uniform, params) => {
133
+ const geom = params.geometry;
134
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.depthTexture, RenderFlags_1.TextureUnit.One);
135
+ });
136
+ });
137
+ // Uniforms based on the PointCloudDisplaySettings.
138
+ frag.addUniform("u_pointCloudEDL1", 5 /* Vec4 */, (prog) => {
139
+ prog.addGraphicUniform("u_pointCloudEDL1", (uniform, params) => {
140
+ params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);
141
+ });
142
+ });
143
+ builder.vert.headerComment = "//!V! EDLCalcFull";
144
+ builder.frag.headerComment = "//!F! EDLCalcFull";
145
+ return builder.buildProgram(context);
146
+ }
147
+ exports.createEDLCalcFullProgram = createEDLCalcFullProgram;
148
+ // This shader filters the EDL image, and can be run at 1/2 and 1/4 scale
149
+ const filterEDL = `
150
+ // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2
151
+ float distCoefs[] = float[] (
152
+ 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,
153
+ 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);
154
+ const float depthSigma = 0.4;
155
+ vec2 invTexSize = u_texInfo.xy;
156
+
157
+ float depth = TEXTURE(u_depthTexture, v_texCoord).r;
158
+ float wsum = 0.0; // sum of all weights
159
+ vec3 csum = vec3(0.0); // sum of all contributions
160
+ vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y
161
+
162
+ for (int c = -2; c <= 2; c++) {
163
+ coordi.x = float(c) * invTexSize.x;
164
+ int cabs = (c < 0) ? -c : c;
165
+
166
+ for (int d = -2; d <= 2; d++) {
167
+ coordi.y = float(d) * invTexSize.y;
168
+ vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color
169
+
170
+ //pixel distance based damping
171
+ int dabs = (d < 0) ? -d : d;
172
+ float fi = distCoefs[cabs * 3 + dabs];
173
+
174
+ //pixel depth difference based damping
175
+ float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth
176
+ float dz = (depth - zi) / depthSigma;
177
+ fi *= exp(-dz * dz / 2.0);
178
+
179
+ csum += ci.rgb * fi;
180
+ wsum += fi;
181
+ }
182
+ }
183
+ return vec4(csum / wsum, 1.0);
184
+ `;
185
+ /** @internal */
186
+ function createEDLFilterProgram(context) {
187
+ const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(true);
188
+ const frag = builder.frag;
189
+ frag.set(1 /* ComputeBaseColor */, filterEDL);
190
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
191
+ frag.addUniform("u_texInfo", 4 /* Vec3 */, (prog) => {
192
+ prog.addGraphicUniform("u_texInfo", (uniform, params) => {
193
+ const geom = params.geometry;
194
+ uniform.setUniform3fv(geom.texInfo);
195
+ });
196
+ });
197
+ frag.addUniform("u_colorTexture", 8 /* Sampler2D */, (prog) => {
198
+ prog.addGraphicUniform("u_colorTexture", (uniform, params) => {
199
+ const geom = params.geometry;
200
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture, RenderFlags_1.TextureUnit.Zero);
201
+ });
202
+ });
203
+ frag.addUniform("u_depthTexture", 8 /* Sampler2D */, (prog) => {
204
+ prog.addGraphicUniform("u_depthTexture", (uniform, params) => {
205
+ const geom = params.geometry;
206
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.depthTexture, RenderFlags_1.TextureUnit.One);
207
+ });
208
+ });
209
+ builder.vert.headerComment = "//!V! EDLFilter";
210
+ builder.frag.headerComment = "//!F! EDLFilter";
211
+ return builder.buildProgram(context);
212
+ }
213
+ exports.createEDLFilterProgram = createEDLFilterProgram;
214
+ // This shader mixes the 3 EDL images into the final image
215
+ const mixEDL = `
216
+ vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);
217
+ if (col1.a == 0.0)
218
+ discard;
219
+ else {
220
+ vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;
221
+ vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;
222
+ return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);
223
+ }
224
+ `;
225
+ /** @internal */
226
+ function createEDLMixProgram(context) {
227
+ const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(true);
228
+ const frag = builder.frag;
229
+ frag.set(1 /* ComputeBaseColor */, mixEDL);
230
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
231
+ frag.addUniform("u_colorTexture1", 8 /* Sampler2D */, (prog) => {
232
+ prog.addGraphicUniform("u_colorTexture1", (uniform, params) => {
233
+ const geom = params.geometry;
234
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture1, RenderFlags_1.TextureUnit.Zero);
235
+ });
236
+ });
237
+ frag.addUniform("u_colorTexture2", 8 /* Sampler2D */, (prog) => {
238
+ prog.addGraphicUniform("u_colorTexture2", (uniform, params) => {
239
+ const geom = params.geometry;
240
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture2, RenderFlags_1.TextureUnit.One);
241
+ });
242
+ });
243
+ frag.addUniform("u_colorTexture4", 8 /* Sampler2D */, (prog) => {
244
+ prog.addGraphicUniform("u_colorTexture4", (uniform, params) => {
245
+ const geom = params.geometry;
246
+ Texture_1.Texture2DHandle.bindSampler(uniform, geom.colorTexture4, RenderFlags_1.TextureUnit.Two);
247
+ });
248
+ });
249
+ // Uniforms based on the PointCloudDisplaySettings.
250
+ frag.addUniform("u_weights", 5 /* Vec4 */, (prog) => {
251
+ prog.addGraphicUniform("u_weights", (uniform, params) => {
252
+ params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);
253
+ });
254
+ });
255
+ builder.vert.headerComment = "//!V! EDLMix";
256
+ builder.frag.headerComment = "//!F! EDLMix";
257
+ return builder.buildProgram(context);
258
+ }
259
+ exports.createEDLMixProgram = createEDLMixProgram;
260
+ //# sourceMappingURL=EDL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EDL.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.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 { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { EDLCalcBasicGeometry, EDLCalcFullGeometry, EDLFilterGeometry, EDLMixGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader calculates a more basic version of EDL, and only for the original size, so single pass\r\nconst calcBasicEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n discard;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcBasicProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcBasicEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcBasic\";\r\n builder.frag.headerComment = \"//!F! EDLCalcBasic\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale\r\nconst calcFullEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n float scale = u_texInfo.z; // 1, 2, 4\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n return color;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcFullProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcFullEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcFull\";\r\n builder.frag.headerComment = \"//!F! EDLCalcFull\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader filters the EDL image, and can be run at 1/2 and 1/4 scale\r\nconst filterEDL = `\r\n // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2\r\n float distCoefs[] = float[] (\r\n 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,\r\n 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);\r\n const float depthSigma = 0.4;\r\n vec2 invTexSize = u_texInfo.xy;\r\n\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float wsum = 0.0; // sum of all weights\r\n vec3 csum = vec3(0.0); // sum of all contributions\r\n vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y\r\n\r\n for (int c = -2; c <= 2; c++) {\r\n coordi.x = float(c) * invTexSize.x;\r\n int cabs = (c < 0) ? -c : c;\r\n\r\n for (int d = -2; d <= 2; d++) {\r\n coordi.y = float(d) * invTexSize.y;\r\n vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color\r\n\r\n //pixel distance based damping\r\n int dabs = (d < 0) ? -d : d;\r\n float fi = distCoefs[cabs * 3 + dabs];\r\n\r\n //pixel depth difference based damping\r\n float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth\r\n float dz = (depth - zi) / depthSigma;\r\n fi *= exp(-dz * dz / 2.0);\r\n\r\n csum += ci.rgb * fi;\r\n wsum += fi;\r\n }\r\n }\r\n return vec4(csum / wsum, 1.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLFilterProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, filterEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLFilter\";\r\n builder.frag.headerComment = \"//!F! EDLFilter\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader mixes the 3 EDL images into the final image\r\nconst mixEDL = `\r\n vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);\r\n if (col1.a == 0.0)\r\n discard;\r\n else {\r\n vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;\r\n vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;\r\n return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLMixProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, mixEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_colorTexture1\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture1\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture1, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture2\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture2\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture2, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture4\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture4\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture4, TextureUnit.Two);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_weights\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_weights\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLMix\";\r\n builder.frag.headerComment = \"//!F! EDLMix\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -14,14 +14,14 @@ const renderPasses = [
14
14
  [1 /* OpaqueLayers */, "Layers"],
15
15
  [2 /* OpaqueLinear */, "OpaqueLinear"],
16
16
  [3 /* OpaquePlanar */, "OpaquePlanar"],
17
- [4 /* OpaqueGeneral */, "OpaqueGeneral"],
18
- [5 /* Classification */, "Classification"],
19
- [7 /* Translucent */, "Translucent"],
20
- [8 /* HiddenEdge */, "HiddenEdge"],
21
- [9 /* Hilite */, "Hilite"],
22
- [11 /* WorldOverlay */, "WorldOverlay"],
23
- [12 /* ViewOverlay */, "ViewOverlay"],
24
- [18 /* PlanarClassification */, "PlanarClassification"],
17
+ [5 /* OpaqueGeneral */, "OpaqueGeneral"],
18
+ [6 /* Classification */, "Classification"],
19
+ [8 /* Translucent */, "Translucent"],
20
+ [9 /* HiddenEdge */, "HiddenEdge"],
21
+ [10 /* Hilite */, "Hilite"],
22
+ [12 /* WorldOverlay */, "WorldOverlay"],
23
+ [13 /* ViewOverlay */, "ViewOverlay"],
24
+ [19 /* PlanarClassification */, "PlanarClassification"],
25
25
  ];
26
26
  /**
27
27
  * Adds a uniform holding the current render pass and a set of kRenderPass_* constants
@@ -33,11 +33,11 @@ function addRenderPass(builder) {
33
33
  prog.addProgramUniform("u_renderPass", (uniform, params) => {
34
34
  let renderPass = params.renderPass;
35
35
  switch (renderPass) {
36
- case 8 /* HiddenEdge */:
37
- renderPass = 4 /* OpaqueGeneral */; // no distinction from shader POV...
36
+ case 9 /* HiddenEdge */:
37
+ renderPass = 5 /* OpaqueGeneral */; // no distinction from shader POV...
38
38
  break;
39
- case 10 /* OverlayLayers */:
40
- case 6 /* TranslucentLayers */:
39
+ case 11 /* OverlayLayers */:
40
+ case 7 /* TranslucentLayers */:
41
41
  renderPass = 1 /* OpaqueLayers */; // no distinction from shader POV...
42
42
  break;
43
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RenderPass.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RenderPass.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,8CAA8C;AAC9C,MAAM,YAAY,GAAG;IACnB,qBAAwB,YAAY,CAAC;IACrC,uBAA0B,QAAQ,CAAC;IACnC,uBAA0B,cAAc,CAAC;IACzC,uBAA0B,cAAc,CAAC;IACzC,wBAA2B,eAAe,CAAC;IAC3C,yBAA4B,gBAAgB,CAAC;IAC7C,sBAAyB,aAAa,CAAC;IACvC,qBAAwB,YAAY,CAAC;IACrC,iBAAoB,QAAQ,CAAC;IAC7B,wBAA0B,cAAc,CAAC;IACzC,uBAAyB,aAAa,CAAC;IACvC,gCAAkC,sBAAsB,CAAC;CAC1D,CAAC;AAEF;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAsB;IAClD,OAAO,CAAC,UAAU,CAAC,cAAc,iBAAsB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,QAAQ,UAAU,EAAE;gBAClB;oBACE,UAAU,wBAA2B,CAAC,CAAC,oCAAoC;oBAC3E,MAAM;gBACR,4BAA8B;gBAC9B;oBACE,UAAU,uBAA0B,CAAC,CAAC,oCAAoC;oBAC1E,MAAM;aACT;YAED,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI,YAAY;QACnC,OAAO,CAAC,SAAS,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAsB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjH,CAAC;AApBD,sCAoBC","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 { RenderPass } from \"../RenderFlags\";\r\nimport { ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\n\r\n// render passes actually used in shader code.\r\nconst renderPasses = [\r\n [RenderPass.Background, \"Background\"],\r\n [RenderPass.OpaqueLayers, \"Layers\"], // Shaders treat all layer passes the same\r\n [RenderPass.OpaqueLinear, \"OpaqueLinear\"],\r\n [RenderPass.OpaquePlanar, \"OpaquePlanar\"],\r\n [RenderPass.OpaqueGeneral, \"OpaqueGeneral\"],\r\n [RenderPass.Classification, \"Classification\"],\r\n [RenderPass.Translucent, \"Translucent\"],\r\n [RenderPass.HiddenEdge, \"HiddenEdge\"],\r\n [RenderPass.Hilite, \"Hilite\"],\r\n [RenderPass.WorldOverlay, \"WorldOverlay\"],\r\n [RenderPass.ViewOverlay, \"ViewOverlay\"],\r\n [RenderPass.PlanarClassification, \"PlanarClassification\"],\r\n];\r\n\r\n/**\r\n * Adds a uniform holding the current render pass and a set of kRenderPass_* constants\r\n * uniform float u_renderPass\r\n * @internal\r\n */\r\nexport function addRenderPass(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderPass\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_renderPass\", (uniform, params) => {\r\n let renderPass = params.renderPass;\r\n switch (renderPass) {\r\n case RenderPass.HiddenEdge:\r\n renderPass = RenderPass.OpaqueGeneral; // no distinction from shader POV...\r\n break;\r\n case RenderPass.OverlayLayers:\r\n case RenderPass.TranslucentLayers:\r\n renderPass = RenderPass.OpaqueLayers; // no distinction from shader POV...\r\n break;\r\n }\r\n\r\n uniform.setUniform1f(renderPass);\r\n });\r\n });\r\n\r\n for (const renderPass of renderPasses)\r\n builder.addGlobal(`kRenderPass_${renderPass[1]}`, VariableType.Float, `${renderPass[0].toString()}.0`, true);\r\n}\r\n"]}
1
+ {"version":3,"file":"RenderPass.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RenderPass.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,8CAA8C;AAC9C,MAAM,YAAY,GAAG;IACnB,qBAAwB,YAAY,CAAC;IACrC,uBAA0B,QAAQ,CAAC;IACnC,uBAA0B,cAAc,CAAC;IACzC,uBAA0B,cAAc,CAAC;IACzC,wBAA2B,eAAe,CAAC;IAC3C,yBAA4B,gBAAgB,CAAC;IAC7C,sBAAyB,aAAa,CAAC;IACvC,qBAAwB,YAAY,CAAC;IACrC,kBAAoB,QAAQ,CAAC;IAC7B,wBAA0B,cAAc,CAAC;IACzC,uBAAyB,aAAa,CAAC;IACvC,gCAAkC,sBAAsB,CAAC;CAC1D,CAAC;AAEF;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAsB;IAClD,OAAO,CAAC,UAAU,CAAC,cAAc,iBAAsB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,QAAQ,UAAU,EAAE;gBAClB;oBACE,UAAU,wBAA2B,CAAC,CAAC,oCAAoC;oBAC3E,MAAM;gBACR,4BAA8B;gBAC9B;oBACE,UAAU,uBAA0B,CAAC,CAAC,oCAAoC;oBAC1E,MAAM;aACT;YAED,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI,YAAY;QACnC,OAAO,CAAC,SAAS,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAsB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjH,CAAC;AApBD,sCAoBC","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 { RenderPass } from \"../RenderFlags\";\r\nimport { ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\n\r\n// render passes actually used in shader code.\r\nconst renderPasses = [\r\n [RenderPass.Background, \"Background\"],\r\n [RenderPass.OpaqueLayers, \"Layers\"], // Shaders treat all layer passes the same\r\n [RenderPass.OpaqueLinear, \"OpaqueLinear\"],\r\n [RenderPass.OpaquePlanar, \"OpaquePlanar\"],\r\n [RenderPass.OpaqueGeneral, \"OpaqueGeneral\"],\r\n [RenderPass.Classification, \"Classification\"],\r\n [RenderPass.Translucent, \"Translucent\"],\r\n [RenderPass.HiddenEdge, \"HiddenEdge\"],\r\n [RenderPass.Hilite, \"Hilite\"],\r\n [RenderPass.WorldOverlay, \"WorldOverlay\"],\r\n [RenderPass.ViewOverlay, \"ViewOverlay\"],\r\n [RenderPass.PlanarClassification, \"PlanarClassification\"],\r\n];\r\n\r\n/**\r\n * Adds a uniform holding the current render pass and a set of kRenderPass_* constants\r\n * uniform float u_renderPass\r\n * @internal\r\n */\r\nexport function addRenderPass(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderPass\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_renderPass\", (uniform, params) => {\r\n let renderPass = params.renderPass;\r\n switch (renderPass) {\r\n case RenderPass.HiddenEdge:\r\n renderPass = RenderPass.OpaqueGeneral; // no distinction from shader POV...\r\n break;\r\n case RenderPass.OverlayLayers:\r\n case RenderPass.TranslucentLayers:\r\n renderPass = RenderPass.OpaqueLayers; // no distinction from shader POV...\r\n break;\r\n }\r\n\r\n uniform.setUniform1f(renderPass);\r\n });\r\n });\r\n\r\n for (const renderPass of renderPasses)\r\n builder.addGlobal(`kRenderPass_${renderPass[1]}`, VariableType.Float, `${renderPass[0].toString()}.0`, true);\r\n}\r\n"]}
@@ -289,7 +289,7 @@ class GraphicsTile extends internal_1.Tile {
289
289
  (0, core_bentley_1.assert)(data instanceof Uint8Array);
290
290
  const stream = core_bentley_1.ByteStream.fromUint8Array(data);
291
291
  const position = stream.curPos;
292
- const format = stream.nextUint32;
292
+ const format = stream.readUint32();
293
293
  stream.curPos = position;
294
294
  // ###TODO: IModelGraphics format wraps IModel format.
295
295
  (0, core_bentley_1.assert)(core_common_1.TileFormat.IModel === format);