@itwin/core-frontend 3.1.0-dev.28 → 3.1.0-dev.33
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.
- package/lib/cjs/AccuSnap.js +2 -2
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +3 -3
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +32 -8
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/IModelApp.js +2 -2
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/RealityDataSource.d.ts +9 -1
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +11 -1
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/ViewState.js +1 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +2 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +9 -5
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +5 -2
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +4 -4
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/Scene.d.ts.map +1 -1
- package/lib/cjs/render/Scene.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +15 -2
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -3
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +7 -2
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +30 -11
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +154 -52
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +4 -0
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +9 -9
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +5 -5
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +31 -16
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts +1 -0
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -1
- package/lib/cjs/tile/OPCFormatInterpreter.js +25 -14
- package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +53 -2
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +0 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +1 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +7 -3
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +1 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +66 -47
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +5 -0
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +0 -2
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +1 -3
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +6 -4
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +5 -4
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +13 -5
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +12 -7
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +60 -48
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +1 -1
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuSnap.js +2 -2
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +3 -3
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +34 -10
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/IModelApp.js +2 -2
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/RealityDataSource.d.ts +9 -1
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +10 -1
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/ViewState.js +1 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +2 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +9 -5
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +5 -2
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +4 -4
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/Scene.d.ts.map +1 -1
- package/lib/esm/render/Scene.js.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +15 -2
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +2 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -3
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +5 -3
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +7 -2
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +30 -11
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +154 -52
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +4 -0
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +9 -9
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +6 -6
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +32 -17
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/OPCFormatInterpreter.d.ts +1 -0
- package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -1
- package/lib/esm/tile/OPCFormatInterpreter.js +26 -15
- package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +51 -2
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +0 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +1 -1
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
- package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +1 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +7 -3
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +1 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +67 -48
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +5 -0
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +0 -2
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +1 -3
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +6 -4
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
- package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +5 -4
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +13 -5
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +12 -7
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +61 -49
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +1 -1
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +20 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Matrix4d } from "@itwin/core-geometry";
|
|
2
1
|
import { SpatialClassifier, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from "@itwin/core-common";
|
|
2
|
+
import { Matrix4d } from "@itwin/core-geometry";
|
|
3
3
|
import { PlanarClipMaskState } from "../../PlanarClipMaskState";
|
|
4
4
|
import { SpatialClassifierTileTreeReference } from "../../tile/internal";
|
|
5
5
|
import { SceneContext } from "../../ViewContext";
|
|
@@ -50,6 +50,7 @@ export declare class PlanarClassifier extends RenderPlanarClassifier implements
|
|
|
50
50
|
private _isClassifyingPointCloud?;
|
|
51
51
|
private readonly _bgColor;
|
|
52
52
|
private constructor();
|
|
53
|
+
get textureImageCount(): number;
|
|
53
54
|
getParams(params: Float32Array): void;
|
|
54
55
|
get hiliteTexture(): Texture | undefined;
|
|
55
56
|
get projectionMatrix(): Matrix4d;
|
|
@@ -66,7 +67,9 @@ export declare class PlanarClassifier extends RenderPlanarClassifier implements
|
|
|
66
67
|
get isDisposed(): boolean;
|
|
67
68
|
dispose(): void;
|
|
68
69
|
get texture(): Texture | undefined;
|
|
70
|
+
getOrCreateClassifierTexture(): Texture | undefined;
|
|
69
71
|
private pushBatches;
|
|
72
|
+
get sourceTransparency(): number | undefined;
|
|
70
73
|
pushBatchState(batchState: BatchState): void;
|
|
71
74
|
setSource(classifierTreeRef?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState): void;
|
|
72
75
|
collectGraphics(context: SceneContext, target: PlanarClassifierTarget): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ exports.PlanarClassifier = exports.PlanarClassifierContent = void 0;
|
|
|
9
9
|
* @module WebGL
|
|
10
10
|
*/
|
|
11
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
-
const core_geometry_1 = require("@itwin/core-geometry");
|
|
13
12
|
const core_common_1 = require("@itwin/core-common");
|
|
13
|
+
const core_geometry_1 = require("@itwin/core-geometry");
|
|
14
14
|
const internal_1 = require("../../tile/internal");
|
|
15
15
|
const RenderPlanarClassifier_1 = require("../RenderPlanarClassifier");
|
|
16
16
|
const BatchState_1 = require("./BatchState");
|
|
@@ -282,6 +282,7 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
282
282
|
this._batchState = new BatchState_1.BatchState(this._branchStack);
|
|
283
283
|
this._renderCommands = new RenderCommands_1.RenderCommands(target, this._branchStack, this._batchState);
|
|
284
284
|
}
|
|
285
|
+
get textureImageCount() { return this._contentMode; }
|
|
285
286
|
getParams(params) {
|
|
286
287
|
var _a, _b;
|
|
287
288
|
params[0] = this.insideDisplay;
|
|
@@ -337,6 +338,14 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
337
338
|
return (_c = this._classifierAndMaskCombinedBuffer) === null || _c === void 0 ? void 0 : _c.texture;
|
|
338
339
|
}
|
|
339
340
|
}
|
|
341
|
+
getOrCreateClassifierTexture() {
|
|
342
|
+
var _a;
|
|
343
|
+
if (undefined === this._classifierBuffers)
|
|
344
|
+
this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);
|
|
345
|
+
if (undefined !== this._classifierBuffers && undefined === this._classifierCombinedBuffer)
|
|
346
|
+
this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);
|
|
347
|
+
return (_a = this._classifierCombinedBuffer) === null || _a === void 0 ? void 0 : _a.texture;
|
|
348
|
+
}
|
|
340
349
|
pushBatches(batchState, graphics) {
|
|
341
350
|
graphics.forEach((graphic) => {
|
|
342
351
|
if (graphic instanceof Graphic_1.Batch) {
|
|
@@ -348,6 +357,10 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
348
357
|
}
|
|
349
358
|
});
|
|
350
359
|
}
|
|
360
|
+
get sourceTransparency() {
|
|
361
|
+
var _a;
|
|
362
|
+
return (_a = this._classifierTreeRef) === null || _a === void 0 ? void 0 : _a.transparency;
|
|
363
|
+
}
|
|
351
364
|
pushBatchState(batchState) {
|
|
352
365
|
this._baseBatchId = batchState.nextBatchId - 1;
|
|
353
366
|
if (undefined !== this._classifierGraphics)
|
|
@@ -366,10 +379,8 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
366
379
|
const viewState = context.viewingSpace.view;
|
|
367
380
|
if (undefined === viewState)
|
|
368
381
|
return;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
const requiredHeight = Math.min(Math.max(context.target.viewRect.width, context.target.viewRect.height), System_1.System.instance.capabilities.maxTextureSize / 2);
|
|
372
|
-
const requiredWidth = requiredHeight;
|
|
382
|
+
const requiredHeight = context.target.viewRect.height;
|
|
383
|
+
const requiredWidth = context.target.viewRect.width;
|
|
373
384
|
if (requiredWidth !== this._width || requiredHeight !== this._height)
|
|
374
385
|
this.dispose();
|
|
375
386
|
this._width = requiredWidth;
|
|
@@ -464,9 +475,7 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
464
475
|
target.graphics.foreground.push(this._debugFrustumGraphic);
|
|
465
476
|
// Temporarily override the Target's state.
|
|
466
477
|
const system = System_1.System.instance;
|
|
467
|
-
const
|
|
468
|
-
system.context.viewport(0, 0, this._width, this._height);
|
|
469
|
-
const vf = target.currentViewFlags.copy({
|
|
478
|
+
const maskViewFlags = {
|
|
470
479
|
renderMode: core_common_1.RenderMode.SmoothShade,
|
|
471
480
|
wiremesh: false,
|
|
472
481
|
transparency: !this.isClassifyingPointCloud,
|
|
@@ -478,7 +487,10 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
478
487
|
ambientOcclusion: false,
|
|
479
488
|
visibleEdges: false,
|
|
480
489
|
hiddenEdges: false,
|
|
481
|
-
}
|
|
490
|
+
};
|
|
491
|
+
const prevState = system.currentRenderState.clone(scratchPrevRenderState);
|
|
492
|
+
system.context.viewport(0, 0, this._width, this._height);
|
|
493
|
+
const vf = target.currentViewFlags.copy(this._classifierTreeRef ? this._classifierTreeRef.viewFlags : maskViewFlags);
|
|
482
494
|
system.applyRenderState(this._renderState);
|
|
483
495
|
const prevPlan = target.plan;
|
|
484
496
|
const prevOverrides = target.currentFeatureSymbologyOverrides;
|
|
@@ -500,6 +512,7 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
500
512
|
const cmds = renderCommands.getCommands(3 /* OpaquePlanar */);
|
|
501
513
|
// NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., "planar" polyface/bspsurf) we do not detect planarity.
|
|
502
514
|
cmds.push(...renderCommands.getCommands(4 /* OpaqueGeneral */));
|
|
515
|
+
cmds.push(...renderCommands.getCommands(2 /* OpaqueLinear */));
|
|
503
516
|
this._anyOpaque = cmds.length > 0;
|
|
504
517
|
const transCmds = renderCommands.getCommands(7 /* Translucent */);
|
|
505
518
|
if (transCmds.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarClassifier.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Frustum, FrustumPlanes, RenderMode, RenderTexture, SpatialClassifier, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay, TextureTransparency,\r\n} from \"@itwin/core-common\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { GraphicsCollectorDrawArgs, SpatialClassifierTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PlanarClassifierTarget, RenderPlanarClassifier } from \"../RenderPlanarClassifier\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { CachedGeometry, Combine3TexturesGeometry, CombineTexturesGeometry, ViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands } from \"./DrawCommand\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { PlanarTextureProjection } from \"./PlanarTextureProjection\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\nexport enum PlanarClassifierContent { None = 0, MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3 }\r\n\r\nfunction createTexture(handle: TextureHandle): Texture {\r\n return new Texture({\r\n handle,\r\n ownership: \"external\",\r\n type: RenderTexture.Type.TileSection,\r\n transparency: TextureTransparency.Opaque,\r\n });\r\n}\r\n\r\nfunction createTextureHandle(width: number, height: number, heightMult = 1.0) { return TextureHandle.createForAttachment(width, height * heightMult, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte); }\r\n\r\nclass ClassifierTextures implements WebGLDisposable {\r\n private constructor(public readonly color: Texture,\r\n public readonly feature: Texture,\r\n public readonly hilite: Texture) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.color.isDisposed\r\n && this.feature.isDisposed\r\n && this.hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.color);\r\n dispose(this.feature);\r\n dispose(this.hilite);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addPlanarClassifier(this.color.bytesUsed);\r\n stats.addPlanarClassifier(this.feature.bytesUsed);\r\n stats.addPlanarClassifier(this.hilite.bytesUsed);\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierTextures | undefined {\r\n const hColor = createTextureHandle(width, height);\r\n const hFeature = createTextureHandle(width, height);\r\n const hHilite = createTextureHandle(width, height);\r\n if (!hColor || !hFeature || !hHilite)\r\n return undefined;\r\n\r\n const color = createTexture(hColor);\r\n const feature = createTexture(hFeature);\r\n const hilite = createTexture(hHilite);\r\n if (!color || !feature || !hilite)\r\n return undefined;\r\n\r\n return new ClassifierTextures(color, feature, hilite);\r\n }\r\n}\r\n\r\nabstract class ClassifierFrameBuffers implements WebGLDisposable {\r\n protected constructor(\r\n public readonly textures: ClassifierTextures,\r\n private readonly _hilite: FrameBuffer) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.textures.isDisposed && this._hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.textures);\r\n dispose(this._hilite);\r\n }\r\n\r\n public abstract draw(cmds: DrawCommands, target: Target): void;\r\n\r\n public drawHilite(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(this._hilite, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.execute(target, cmds, RenderPass.Hilite);\r\n });\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierFrameBuffers | undefined {\r\n const textures = ClassifierTextures.create(width, height);\r\n if (undefined === textures)\r\n return undefined;\r\n\r\n const hiliteFbo = FrameBuffer.create([textures.hilite.texture]);\r\n if (undefined === hiliteFbo)\r\n return undefined;\r\n\r\n if (System.instance.capabilities.supportsDrawBuffers)\r\n return ClassifierMRTFrameBuffers.createMRT(textures, hiliteFbo);\r\n else\r\n return ClassifierMPFrameBuffers.createMP(textures, hiliteFbo);\r\n }\r\n}\r\n\r\nclass ClassifierMRTFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _fbo: FrameBuffer;\r\n private readonly _clearGeom: ViewportQuadGeometry;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, fbo: FrameBuffer, geom: ViewportQuadGeometry) {\r\n super(textures, hilite);\r\n this._fbo = fbo;\r\n this._clearGeom = geom;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._fbo.isDisposed\r\n && this._clearGeom.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._fbo);\r\n dispose(this._clearGeom);\r\n super.dispose();\r\n }\r\n\r\n public static createMRT(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMRTFrameBuffers | undefined {\r\n const fbo = FrameBuffer.create([textures.color.texture, textures.feature.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n const geom = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n return undefined !== geom ? new ClassifierMRTFrameBuffers(textures, hilite, fbo, geom) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n System.instance.frameBufferStack.execute(this._fbo, true, false, () => {\r\n target.techniques.draw(getDrawParams(target, this._clearGeom));\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierMPFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _color: FrameBuffer;\r\n private readonly _feature: FrameBuffer;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, color: FrameBuffer, feature: FrameBuffer) {\r\n super(textures, hilite);\r\n this._color = color;\r\n this._feature = feature;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._color.isDisposed\r\n && this._feature.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._color);\r\n dispose(this._feature);\r\n super.dispose();\r\n }\r\n\r\n public static createMP(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMPFrameBuffers | undefined {\r\n const color = FrameBuffer.create([textures.color.texture]);\r\n const feature = FrameBuffer.create([textures.feature.texture]);\r\n return undefined !== color && undefined !== feature ? new ClassifierMPFrameBuffers(textures, hilite, color, feature) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n const draw = (feature: boolean) => {\r\n const fbo = feature ? this._feature : this._color;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.compositor.currentRenderTargetIndex = feature ? 1 : 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n };\r\n\r\n draw(false);\r\n draw(true);\r\n }\r\n}\r\n\r\ninterface TextureAndFbo {\r\n texture: Texture;\r\n fbo: FrameBuffer;\r\n}\r\n\r\nabstract class SingleTextureFrameBuffer implements WebGLDisposable {\r\n public texture: Texture;\r\n protected fbo: FrameBuffer;\r\n public get isDisposed(): boolean { return this.texture.isDisposed && this.fbo.isDisposed; }\r\n public collectStatistics(stats: RenderMemory.Statistics): void { stats.addPlanarClassifier(this.texture.bytesUsed); }\r\n protected constructor(textureAndFbo: TextureAndFbo) {\r\n this.texture = textureAndFbo.texture;\r\n this.fbo = textureAndFbo.fbo;\r\n }\r\n public dispose(): void {\r\n dispose(this.texture);\r\n dispose(this.fbo);\r\n }\r\n public static createTextureAndFrameBuffer(width: number, height: number): TextureAndFbo | undefined {\r\n const hTexture = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n if (!hTexture)\r\n return undefined;\r\n\r\n const texture = new Texture({ type: RenderTexture.Type.TileSection, ownership: \"external\", handle: hTexture, transparency: TextureTransparency.Opaque });\r\n if (!texture)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([texture.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n return { texture, fbo };\r\n }\r\n}\r\nclass MaskFrameBuffer extends SingleTextureFrameBuffer {\r\n public static create(width: number, height: number): MaskFrameBuffer | undefined {\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, height);\r\n return undefined === textureFbo ? undefined : new MaskFrameBuffer(textureFbo);\r\n }\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n if (!System.instance.capabilities.supportsDrawBuffers)\r\n target.compositor.currentRenderTargetIndex = 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\nabstract class CombineTexturesFrameBuffer extends SingleTextureFrameBuffer {\r\n constructor(textureAndFbo: TextureAndFbo, private _combineGeom: CachedGeometry, private _width: number, private _height: number, private _heightMult: number) { super(textureAndFbo); }\r\n public compose(target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.context.viewport(0, 0, this._width, this._heightMult * this._height);\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.draw(getDrawParams(target, this._combineGeom));\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = CombineTexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 2 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierCombinationBuffer(textureFbo, combineGeom, width, height, 2);\r\n }\r\n}\r\nclass ClassifierAndMaskCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture, mask: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = Combine3TexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!, mask.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 3 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierAndMaskCombinationBuffer(textureFbo, combineGeom, width, height, 3);\r\n }\r\n}\r\n\r\nconst scratchPrevRenderState = new RenderState();\r\n\r\n/** @internal */\r\nexport class PlanarClassifier extends RenderPlanarClassifier implements RenderMemory.Consumer, WebGLDisposable {\r\n private _classifierBuffers?: ClassifierFrameBuffers;\r\n private _maskBuffer?: MaskFrameBuffer;\r\n private _classifierCombinedBuffer?: ClassifierCombinationBuffer;\r\n private _classifierAndMaskCombinedBuffer?: ClassifierAndMaskCombinationBuffer;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics?: RenderGraphic[];\r\n private readonly _classifierGraphics: RenderGraphic[] = [];\r\n private readonly _maskGraphics: RenderGraphic[] = [];\r\n private _frustum?: Frustum;\r\n private _width = 0;\r\n private _height = 0;\r\n private _baseBatchId = 0;\r\n private _anyHilited = false;\r\n private _anyOpaque = false;\r\n private _anyTranslucent = false;\r\n private _classifier?: SpatialClassifier;\r\n private readonly _plane = Plane3dByOriginAndUnitNormal.create(new Point3d(0, 0, 0), new Vector3d(0, 0, 1))!; // TBD -- Support other planes - default to X-Y for now.\r\n private readonly _renderState = new RenderState();\r\n private readonly _renderCommands: RenderCommands;\r\n private readonly _branchStack = new BranchStack();\r\n private readonly _batchState: BatchState;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _classifierTreeRef?: TileTreeReference;\r\n private _planarClipMaskOverrides?: FeatureSymbology.Overrides;\r\n private _contentMode: PlanarClassifierContent = PlanarClassifierContent.None;\r\n\r\n private static _postProjectionMatrix = Matrix4d.createRowValues(\r\n 0, 1, 0, 0,\r\n 0, 0, -1, 0,\r\n 1, 0, 0, 0,\r\n 0, 0, 0, 1);\r\n private _debugFrustum?: Frustum;\r\n private _doDebugFrustum = false;\r\n private _debugFrustumGraphic?: RenderGraphic = undefined;\r\n private _isClassifyingPointCloud?: boolean; // we will detect this the first time we draw\r\n private readonly _bgColor = ColorDef.from(0, 0, 0, 255);\r\n\r\n private constructor(classifier: SpatialClassifier | undefined, target: Target) {\r\n super();\r\n this._classifier = classifier;\r\n\r\n const flags = this._renderState.flags;\r\n flags.depthMask = flags.blend = flags.depthTest = false;\r\n\r\n this._batchState = new BatchState(this._branchStack);\r\n this._renderCommands = new RenderCommands(target, this._branchStack, this._batchState);\r\n }\r\n\r\n public getParams(params: Float32Array): void {\r\n params[0] = this.insideDisplay;\r\n params[1] = this.outsideDisplay;\r\n params[2] = this._contentMode;\r\n if (this._planarClipMask?.settings.invert) // If the mask sense is inverted, negate the contentMode to indicate this to the shader.\r\n params[2] = - params[2];\r\n\r\n params[3] = (this._planarClipMask?.settings.transparency === undefined) ? -1 : this._planarClipMask.settings.transparency;\r\n\r\n }\r\n\r\n public get hiliteTexture(): Texture | undefined { return undefined !== this._classifierBuffers ? this._classifierBuffers.textures.hilite : undefined; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n // public get properties(): SpatialClassifier { return this._classifier; }\r\n public get baseBatchId(): number { return this._baseBatchId; }\r\n public get anyHilited(): boolean { return this._anyHilited; }\r\n public get anyOpaque(): boolean { return this._anyOpaque; }\r\n public get anyTranslucent(): boolean { return this._anyTranslucent; }\r\n public get insideDisplay(): SpatialClassifierInsideDisplay { return this._classifier ? this._classifier.flags.inside : SpatialClassifierInsideDisplay.Off; }\r\n public get outsideDisplay(): SpatialClassifierOutsideDisplay { return this._classifier ? this._classifier.flags.outside : SpatialClassifierOutsideDisplay.On; }\r\n public get isClassifyingPointCloud(): boolean { return true === this._isClassifyingPointCloud; }\r\n\r\n public addGraphic(graphic: RenderGraphic) {\r\n this._graphics!.push(graphic);\r\n }\r\n\r\n public static create(properties: SpatialClassifier | undefined, target: Target): PlanarClassifier {\r\n return new PlanarClassifier(properties, target);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._classifierBuffers)\r\n this._classifierBuffers.textures.collectStatistics(stats);\r\n\r\n if (undefined !== this._maskBuffer)\r\n this._maskBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierCombinedBuffer)\r\n this._classifierCombinedBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierAndMaskCombinedBuffer)\r\n this._classifierAndMaskCombinedBuffer.collectStatistics(stats);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._classifierBuffers; }\r\n\r\n public dispose() {\r\n this._classifierBuffers = dispose(this._classifierBuffers);\r\n this._maskBuffer = dispose(this._maskBuffer);\r\n this._classifierCombinedBuffer = dispose(this._classifierCombinedBuffer);\r\n this._classifierAndMaskCombinedBuffer = dispose(this._classifierAndMaskCombinedBuffer);\r\n }\r\n\r\n public get texture(): Texture | undefined {\r\n switch (this._contentMode) {\r\n case PlanarClassifierContent.None:\r\n return undefined;\r\n case PlanarClassifierContent.ClassifierOnly:\r\n return this._classifierCombinedBuffer?.texture;\r\n case PlanarClassifierContent.MaskOnly:\r\n return this._maskBuffer?.texture;\r\n case PlanarClassifierContent.ClassifierAndMask:\r\n return this._classifierAndMaskCombinedBuffer?.texture;\r\n }\r\n }\r\n\r\n private pushBatches(batchState: BatchState, graphics: RenderGraphic[]) {\r\n graphics.forEach((graphic) => {\r\n if (graphic instanceof Batch) {\r\n batchState.push(graphic, true);\r\n batchState.pop();\r\n } else if (graphic instanceof Branch) {\r\n this.pushBatches(batchState, graphic.branch.entries);\r\n }\r\n });\r\n }\r\n\r\n public pushBatchState(batchState: BatchState) {\r\n this._baseBatchId = batchState.nextBatchId - 1;\r\n if (undefined !== this._classifierGraphics)\r\n this.pushBatches(batchState, this._classifierGraphics);\r\n }\r\n\r\n public setSource(classifierTreeRef?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState) {\r\n this._classifierTreeRef = classifierTreeRef;\r\n this._classifier = classifierTreeRef?.activeClassifier;\r\n this._planarClipMask = planarClipMask;\r\n }\r\n\r\n public collectGraphics(context: SceneContext, target: PlanarClassifierTarget): void {\r\n this._classifierGraphics.length = this._maskGraphics.length = 0;\r\n if (undefined === context.viewingSpace)\r\n return;\r\n\r\n const viewState = context.viewingSpace.view as ViewState3d;\r\n if (undefined === viewState)\r\n return;\r\n\r\n // TBD - Refine resolution calculation -- increase height based on viewing angle.\r\n // But make sure that we don't make it larger than the hardware supports, keeping in mind that we will be doubling the height later.\r\n const requiredHeight = Math.min(Math.max(context.target.viewRect.width, context.target.viewRect.height), System.instance.capabilities.maxTextureSize / 2);\r\n const requiredWidth = requiredHeight;\r\n\r\n if (requiredWidth !== this._width || requiredHeight !== this._height)\r\n this.dispose();\r\n\r\n this._width = requiredWidth;\r\n this._height = requiredHeight;\r\n const maskTrees = this._planarClipMask?.getTileTrees(viewState, target.modelId);\r\n if (!maskTrees && !this._classifierTreeRef)\r\n return;\r\n\r\n const allTrees = maskTrees ? maskTrees.slice() : new Array<TileTreeReference>();\r\n if (this._classifierTreeRef)\r\n allTrees.push(this._classifierTreeRef);\r\n\r\n const projection = PlanarTextureProjection.computePlanarTextureProjection(this._plane, context, target, allTrees, viewState, this._width, this._height);\r\n if (!projection.textureFrustum || !projection.projectionMatrix || !projection.worldToViewMap)\r\n return;\r\n\r\n this._projectionMatrix = projection.projectionMatrix;\r\n this._frustum = projection.textureFrustum;\r\n this._debugFrustum = projection.debugFrustum;\r\n this._planarClipMaskOverrides = this._planarClipMask?.getPlanarClipMaskSymbologyOverrides();\r\n\r\n const drawTree = (treeRef: TileTreeReference, graphics: RenderGraphic[]) => {\r\n this._graphics = graphics;\r\n const drawArgs = GraphicsCollectorDrawArgs.create(context, this, treeRef, new FrustumPlanes(this._frustum), projection.worldToViewMap!);\r\n if (undefined !== drawArgs)\r\n treeRef.draw(drawArgs);\r\n\r\n this._graphics = undefined;\r\n };\r\n if (this._classifierTreeRef)\r\n drawTree(this._classifierTreeRef, this._classifierGraphics);\r\n\r\n if (maskTrees)\r\n maskTrees.forEach((maskTree) => drawTree(maskTree, this._maskGraphics));\r\n\r\n // Shader behaves slightly differently when classifying surfaces vs point clouds.\r\n this._isClassifyingPointCloud = target.isPointCloud;\r\n\r\n if (this._doDebugFrustum) {\r\n this._debugFrustumGraphic = dispose(this._debugFrustumGraphic);\r\n const builder = context.createSceneGraphicBuilder();\r\n\r\n builder.setSymbology(ColorDef.green, ColorDef.green, 1);\r\n builder.addFrustum(context.viewingSpace.getFrustum());\r\n builder.setSymbology(ColorDef.red, ColorDef.red, 1);\r\n builder.addFrustum(this._debugFrustum!);\r\n builder.setSymbology(ColorDef.white, ColorDef.white, 1);\r\n builder.addFrustum(this._frustum);\r\n this._debugFrustumGraphic = builder.finish();\r\n }\r\n }\r\n\r\n public draw(target: Target) {\r\n if (undefined === this._frustum)\r\n return;\r\n\r\n this._contentMode = PlanarClassifierContent.None;\r\n let combinationBuffer: ClassifierCombinationBuffer | undefined;\r\n if (this._classifierGraphics.length === 0) {\r\n if (this._maskGraphics.length === 0) {\r\n return;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.MaskOnly;\r\n }\r\n } else {\r\n if (undefined === this._classifierBuffers) {\r\n this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);\r\n if (undefined === this._classifierBuffers)\r\n return;\r\n }\r\n if (this._maskGraphics.length === 0) {\r\n if (undefined === this._classifierCombinedBuffer) {\r\n combinationBuffer = this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);\r\n if (undefined === this._classifierCombinedBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.ClassifierOnly;\r\n combinationBuffer = this._classifierCombinedBuffer;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n if (undefined === this._classifierAndMaskCombinedBuffer) {\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer = ClassifierAndMaskCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature, this._maskBuffer.texture);\r\n if (undefined === this._classifierAndMaskCombinedBuffer)\r\n return;\r\n }\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer;\r\n this._contentMode = PlanarClassifierContent.ClassifierAndMask;\r\n }\r\n }\r\n\r\n if (undefined !== this._debugFrustumGraphic)\r\n target.graphics.foreground.push(this._debugFrustumGraphic);\r\n\r\n // Temporarily override the Target's state.\r\n const system = System.instance;\r\n const prevState = system.currentRenderState.clone(scratchPrevRenderState);\r\n system.context.viewport(0, 0, this._width, this._height);\r\n\r\n const vf = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: !this.isClassifyingPointCloud, // point clouds don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n system.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n const prevOverrides = target.currentFeatureSymbologyOverrides;\r\n\r\n target.uniforms.style.changeBackgroundColor(this._bgColor); // Avoid white on white reversal. Will be reset in changeRenderPlan below.\r\n target.changeFrustum(this._frustum, this._frustum.getFraction(), true);\r\n this._anyTranslucent = false;\r\n\r\n const prevProjMatrix = target.uniforms.frustum.projectionMatrix;\r\n target.uniforms.frustum.changeProjectionMatrix(PlanarClassifier._postProjectionMatrix.multiplyMatrixMatrix(prevProjMatrix));\r\n target.uniforms.branch.changeRenderPlan(vf, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = this._renderCommands;\r\n const getDrawCommands = (graphics: RenderGraphic[]) => {\r\n this._batchState.reset();\r\n renderCommands.reset(target, this._branchStack, this._batchState);\r\n renderCommands.collectGraphicsForPlanarProjection(graphics);\r\n\r\n // Draw the classifiers into our attachments.\r\n // When using Display.ElementColor, the color and transparency come from the classifier geometry. Therefore we may need to draw the classified geometry\r\n // in a different pass - or both passes - depending on the transparency of the classifiers.\r\n // NB: \"Outside\" geometry by definition cannot take color/transparency from element...\r\n const cmds = renderCommands.getCommands(RenderPass.OpaquePlanar);\r\n\r\n // NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., \"planar\" polyface/bspsurf) we do not detect planarity.\r\n cmds.push(...renderCommands.getCommands(RenderPass.OpaqueGeneral));\r\n this._anyOpaque = cmds.length > 0;\r\n const transCmds = renderCommands.getCommands(RenderPass.Translucent);\r\n if (transCmds.length > 0) {\r\n cmds.push(...transCmds);\r\n this._anyTranslucent = true;\r\n }\r\n return cmds;\r\n };\r\n\r\n if (this._classifierGraphics.length > 0 && this._classifierBuffers) {\r\n this._classifierBuffers.draw(getDrawCommands(this._classifierGraphics), target);\r\n\r\n // Draw any hilited classifiers.\r\n const hiliteCommands = renderCommands.getCommands(RenderPass.Hilite);\r\n this._anyHilited = 0 !== hiliteCommands.length;\r\n if (this._anyHilited)\r\n this._classifierBuffers.drawHilite(hiliteCommands, target);\r\n }\r\n if (this._maskGraphics.length > 0 && this._maskBuffer) {\r\n if (this._planarClipMaskOverrides)\r\n target.overrideFeatureSymbology(this._planarClipMaskOverrides);\r\n if (this._planarClipMask && this._planarClipMask.settings.transparency !== undefined && this._planarClipMask.settings.transparency > 0.0)\r\n this._anyTranslucent = true;\r\n\r\n this._maskBuffer.draw(getDrawCommands(this._maskGraphics), target);\r\n\r\n }\r\n if (combinationBuffer)\r\n combinationBuffer.compose(target);\r\n\r\n this._batchState.reset();\r\n target.changeRenderPlan(prevPlan);\r\n target.overrideFeatureSymbology(prevOverrides);\r\n\r\n system.applyRenderState(prevState);\r\n system.context.viewport(0, 0, target.viewRect.width, target.viewRect.height);\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"PlanarClassifier.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport {\r\n ColorDef, Frustum, FrustumPlanes, RenderMode, RenderTexture, SpatialClassifier, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay, TextureTransparency,\r\n} from \"@itwin/core-common\";\r\nimport { Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { GraphicsCollectorDrawArgs, SpatialClassifierTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PlanarClassifierTarget, RenderPlanarClassifier } from \"../RenderPlanarClassifier\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { CachedGeometry, Combine3TexturesGeometry, CombineTexturesGeometry, ViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands } from \"./DrawCommand\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { PlanarTextureProjection } from \"./PlanarTextureProjection\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\nexport enum PlanarClassifierContent { None = 0, MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3 }\r\n\r\nfunction createTexture(handle: TextureHandle): Texture {\r\n return new Texture({\r\n handle,\r\n ownership: \"external\",\r\n type: RenderTexture.Type.TileSection,\r\n transparency: TextureTransparency.Opaque,\r\n });\r\n}\r\n\r\nfunction createTextureHandle(width: number, height: number, heightMult = 1.0) { return TextureHandle.createForAttachment(width, height * heightMult, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte); }\r\n\r\nclass ClassifierTextures implements WebGLDisposable {\r\n private constructor(public readonly color: Texture,\r\n public readonly feature: Texture,\r\n public readonly hilite: Texture) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.color.isDisposed\r\n && this.feature.isDisposed\r\n && this.hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.color);\r\n dispose(this.feature);\r\n dispose(this.hilite);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addPlanarClassifier(this.color.bytesUsed);\r\n stats.addPlanarClassifier(this.feature.bytesUsed);\r\n stats.addPlanarClassifier(this.hilite.bytesUsed);\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierTextures | undefined {\r\n const hColor = createTextureHandle(width, height);\r\n const hFeature = createTextureHandle(width, height);\r\n const hHilite = createTextureHandle(width, height);\r\n if (!hColor || !hFeature || !hHilite)\r\n return undefined;\r\n\r\n const color = createTexture(hColor);\r\n const feature = createTexture(hFeature);\r\n const hilite = createTexture(hHilite);\r\n if (!color || !feature || !hilite)\r\n return undefined;\r\n\r\n return new ClassifierTextures(color, feature, hilite);\r\n }\r\n}\r\n\r\nabstract class ClassifierFrameBuffers implements WebGLDisposable {\r\n protected constructor(\r\n public readonly textures: ClassifierTextures,\r\n private readonly _hilite: FrameBuffer) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.textures.isDisposed && this._hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.textures);\r\n dispose(this._hilite);\r\n }\r\n\r\n public abstract draw(cmds: DrawCommands, target: Target): void;\r\n\r\n public drawHilite(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(this._hilite, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.execute(target, cmds, RenderPass.Hilite);\r\n });\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierFrameBuffers | undefined {\r\n const textures = ClassifierTextures.create(width, height);\r\n if (undefined === textures)\r\n return undefined;\r\n\r\n const hiliteFbo = FrameBuffer.create([textures.hilite.texture]);\r\n if (undefined === hiliteFbo)\r\n return undefined;\r\n\r\n if (System.instance.capabilities.supportsDrawBuffers)\r\n return ClassifierMRTFrameBuffers.createMRT(textures, hiliteFbo);\r\n else\r\n return ClassifierMPFrameBuffers.createMP(textures, hiliteFbo);\r\n }\r\n}\r\n\r\nclass ClassifierMRTFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _fbo: FrameBuffer;\r\n private readonly _clearGeom: ViewportQuadGeometry;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, fbo: FrameBuffer, geom: ViewportQuadGeometry) {\r\n super(textures, hilite);\r\n this._fbo = fbo;\r\n this._clearGeom = geom;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._fbo.isDisposed\r\n && this._clearGeom.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._fbo);\r\n dispose(this._clearGeom);\r\n super.dispose();\r\n }\r\n\r\n public static createMRT(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMRTFrameBuffers | undefined {\r\n const fbo = FrameBuffer.create([textures.color.texture, textures.feature.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n const geom = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n return undefined !== geom ? new ClassifierMRTFrameBuffers(textures, hilite, fbo, geom) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n System.instance.frameBufferStack.execute(this._fbo, true, false, () => {\r\n target.techniques.draw(getDrawParams(target, this._clearGeom));\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierMPFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _color: FrameBuffer;\r\n private readonly _feature: FrameBuffer;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, color: FrameBuffer, feature: FrameBuffer) {\r\n super(textures, hilite);\r\n this._color = color;\r\n this._feature = feature;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._color.isDisposed\r\n && this._feature.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._color);\r\n dispose(this._feature);\r\n super.dispose();\r\n }\r\n\r\n public static createMP(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMPFrameBuffers | undefined {\r\n const color = FrameBuffer.create([textures.color.texture]);\r\n const feature = FrameBuffer.create([textures.feature.texture]);\r\n return undefined !== color && undefined !== feature ? new ClassifierMPFrameBuffers(textures, hilite, color, feature) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n const draw = (feature: boolean) => {\r\n const fbo = feature ? this._feature : this._color;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.compositor.currentRenderTargetIndex = feature ? 1 : 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n };\r\n\r\n draw(false);\r\n draw(true);\r\n }\r\n}\r\n\r\ninterface TextureAndFbo {\r\n texture: Texture;\r\n fbo: FrameBuffer;\r\n}\r\n\r\nabstract class SingleTextureFrameBuffer implements WebGLDisposable {\r\n public texture: Texture;\r\n protected fbo: FrameBuffer;\r\n public get isDisposed(): boolean { return this.texture.isDisposed && this.fbo.isDisposed; }\r\n public collectStatistics(stats: RenderMemory.Statistics): void { stats.addPlanarClassifier(this.texture.bytesUsed); }\r\n protected constructor(textureAndFbo: TextureAndFbo) {\r\n this.texture = textureAndFbo.texture;\r\n this.fbo = textureAndFbo.fbo;\r\n }\r\n public dispose(): void {\r\n dispose(this.texture);\r\n dispose(this.fbo);\r\n }\r\n public static createTextureAndFrameBuffer(width: number, height: number): TextureAndFbo | undefined {\r\n const hTexture = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n if (!hTexture)\r\n return undefined;\r\n\r\n const texture = new Texture({ type: RenderTexture.Type.TileSection, ownership: \"external\", handle: hTexture, transparency: TextureTransparency.Opaque });\r\n if (!texture)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([texture.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n return { texture, fbo };\r\n }\r\n}\r\nclass MaskFrameBuffer extends SingleTextureFrameBuffer {\r\n public static create(width: number, height: number): MaskFrameBuffer | undefined {\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, height);\r\n return undefined === textureFbo ? undefined : new MaskFrameBuffer(textureFbo);\r\n }\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n if (!System.instance.capabilities.supportsDrawBuffers)\r\n target.compositor.currentRenderTargetIndex = 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\nabstract class CombineTexturesFrameBuffer extends SingleTextureFrameBuffer {\r\n constructor(textureAndFbo: TextureAndFbo, private _combineGeom: CachedGeometry, private _width: number, private _height: number, private _heightMult: number) { super(textureAndFbo); }\r\n public compose(target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.context.viewport(0, 0, this._width, this._heightMult * this._height);\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.draw(getDrawParams(target, this._combineGeom));\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = CombineTexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 2 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierCombinationBuffer(textureFbo, combineGeom, width, height, 2);\r\n }\r\n}\r\nclass ClassifierAndMaskCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture, mask: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = Combine3TexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!, mask.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 3 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierAndMaskCombinationBuffer(textureFbo, combineGeom, width, height, 3);\r\n }\r\n}\r\n\r\nconst scratchPrevRenderState = new RenderState();\r\n\r\n/** @internal */\r\nexport class PlanarClassifier extends RenderPlanarClassifier implements RenderMemory.Consumer, WebGLDisposable {\r\n private _classifierBuffers?: ClassifierFrameBuffers;\r\n private _maskBuffer?: MaskFrameBuffer;\r\n private _classifierCombinedBuffer?: ClassifierCombinationBuffer;\r\n private _classifierAndMaskCombinedBuffer?: ClassifierAndMaskCombinationBuffer;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics?: RenderGraphic[];\r\n private readonly _classifierGraphics: RenderGraphic[] = [];\r\n private readonly _maskGraphics: RenderGraphic[] = [];\r\n private _frustum?: Frustum;\r\n private _width = 0;\r\n private _height = 0;\r\n private _baseBatchId = 0;\r\n private _anyHilited = false;\r\n private _anyOpaque = false;\r\n private _anyTranslucent = false;\r\n private _classifier?: SpatialClassifier;\r\n private readonly _plane = Plane3dByOriginAndUnitNormal.create(new Point3d(0, 0, 0), new Vector3d(0, 0, 1))!; // TBD -- Support other planes - default to X-Y for now.\r\n private readonly _renderState = new RenderState();\r\n private readonly _renderCommands: RenderCommands;\r\n private readonly _branchStack = new BranchStack();\r\n private readonly _batchState: BatchState;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _classifierTreeRef?: SpatialClassifierTileTreeReference;\r\n private _planarClipMaskOverrides?: FeatureSymbology.Overrides;\r\n private _contentMode: PlanarClassifierContent = PlanarClassifierContent.None;\r\n\r\n private static _postProjectionMatrix = Matrix4d.createRowValues(\r\n 0, 1, 0, 0,\r\n 0, 0, -1, 0,\r\n 1, 0, 0, 0,\r\n 0, 0, 0, 1);\r\n private _debugFrustum?: Frustum;\r\n private _doDebugFrustum = false;\r\n private _debugFrustumGraphic?: RenderGraphic = undefined;\r\n private _isClassifyingPointCloud?: boolean; // we will detect this the first time we draw\r\n private readonly _bgColor = ColorDef.from(0, 0, 0, 255);\r\n\r\n private constructor(classifier: SpatialClassifier | undefined, target: Target) {\r\n super();\r\n this._classifier = classifier;\r\n\r\n const flags = this._renderState.flags;\r\n flags.depthMask = flags.blend = flags.depthTest = false;\r\n\r\n this._batchState = new BatchState(this._branchStack);\r\n this._renderCommands = new RenderCommands(target, this._branchStack, this._batchState);\r\n }\r\n public get textureImageCount(): number { return this._contentMode; }\r\n\r\n public getParams(params: Float32Array): void {\r\n params[0] = this.insideDisplay;\r\n params[1] = this.outsideDisplay;\r\n params[2] = this._contentMode;\r\n if (this._planarClipMask?.settings.invert) // If the mask sense is inverted, negate the contentMode to indicate this to the shader.\r\n params[2] = - params[2];\r\n\r\n params[3] = (this._planarClipMask?.settings.transparency === undefined) ? -1 : this._planarClipMask.settings.transparency;\r\n\r\n }\r\n\r\n public get hiliteTexture(): Texture | undefined { return undefined !== this._classifierBuffers ? this._classifierBuffers.textures.hilite : undefined; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n // public get properties(): SpatialClassifier { return this._classifier; }\r\n public get baseBatchId(): number { return this._baseBatchId; }\r\n public get anyHilited(): boolean { return this._anyHilited; }\r\n public get anyOpaque(): boolean { return this._anyOpaque; }\r\n public get anyTranslucent(): boolean { return this._anyTranslucent; }\r\n public get insideDisplay(): SpatialClassifierInsideDisplay { return this._classifier ? this._classifier.flags.inside : SpatialClassifierInsideDisplay.Off; }\r\n public get outsideDisplay(): SpatialClassifierOutsideDisplay { return this._classifier ? this._classifier.flags.outside : SpatialClassifierOutsideDisplay.On; }\r\n public get isClassifyingPointCloud(): boolean { return true === this._isClassifyingPointCloud; }\r\n\r\n public addGraphic(graphic: RenderGraphic) {\r\n this._graphics!.push(graphic);\r\n }\r\n\r\n public static create(properties: SpatialClassifier | undefined, target: Target): PlanarClassifier {\r\n return new PlanarClassifier(properties, target);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._classifierBuffers)\r\n this._classifierBuffers.textures.collectStatistics(stats);\r\n\r\n if (undefined !== this._maskBuffer)\r\n this._maskBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierCombinedBuffer)\r\n this._classifierCombinedBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierAndMaskCombinedBuffer)\r\n this._classifierAndMaskCombinedBuffer.collectStatistics(stats);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._classifierBuffers; }\r\n\r\n public dispose() {\r\n this._classifierBuffers = dispose(this._classifierBuffers);\r\n this._maskBuffer = dispose(this._maskBuffer);\r\n this._classifierCombinedBuffer = dispose(this._classifierCombinedBuffer);\r\n this._classifierAndMaskCombinedBuffer = dispose(this._classifierAndMaskCombinedBuffer);\r\n }\r\n\r\n public get texture(): Texture | undefined {\r\n switch (this._contentMode) {\r\n case PlanarClassifierContent.None:\r\n return undefined;\r\n case PlanarClassifierContent.ClassifierOnly:\r\n return this._classifierCombinedBuffer?.texture;\r\n case PlanarClassifierContent.MaskOnly:\r\n return this._maskBuffer?.texture;\r\n case PlanarClassifierContent.ClassifierAndMask:\r\n return this._classifierAndMaskCombinedBuffer?.texture;\r\n }\r\n }\r\n public getOrCreateClassifierTexture(): Texture | undefined {\r\n if (undefined === this._classifierBuffers)\r\n this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);\r\n if (undefined !== this._classifierBuffers && undefined === this._classifierCombinedBuffer)\r\n this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);\r\n\r\n return this._classifierCombinedBuffer?.texture;\r\n }\r\n\r\n private pushBatches(batchState: BatchState, graphics: RenderGraphic[]) {\r\n graphics.forEach((graphic) => {\r\n if (graphic instanceof Batch) {\r\n batchState.push(graphic, true);\r\n batchState.pop();\r\n } else if (graphic instanceof Branch) {\r\n this.pushBatches(batchState, graphic.branch.entries);\r\n }\r\n });\r\n }\r\n public get sourceTransparency() {\r\n return this._classifierTreeRef?.transparency;\r\n }\r\n\r\n public pushBatchState(batchState: BatchState) {\r\n this._baseBatchId = batchState.nextBatchId - 1;\r\n if (undefined !== this._classifierGraphics)\r\n this.pushBatches(batchState, this._classifierGraphics);\r\n }\r\n\r\n public setSource(classifierTreeRef?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState) {\r\n this._classifierTreeRef = classifierTreeRef;\r\n this._classifier = classifierTreeRef?.activeClassifier;\r\n this._planarClipMask = planarClipMask;\r\n }\r\n\r\n public collectGraphics(context: SceneContext, target: PlanarClassifierTarget): void {\r\n this._classifierGraphics.length = this._maskGraphics.length = 0;\r\n if (undefined === context.viewingSpace)\r\n return;\r\n\r\n const viewState = context.viewingSpace.view as ViewState3d;\r\n if (undefined === viewState)\r\n return;\r\n\r\n const requiredHeight = context.target.viewRect.height;\r\n const requiredWidth = context.target.viewRect.width;\r\n\r\n if (requiredWidth !== this._width || requiredHeight !== this._height)\r\n this.dispose();\r\n\r\n this._width = requiredWidth;\r\n this._height = requiredHeight;\r\n const maskTrees = this._planarClipMask?.getTileTrees(viewState, target.modelId);\r\n if (!maskTrees && !this._classifierTreeRef)\r\n return;\r\n\r\n const allTrees = maskTrees ? maskTrees.slice() : new Array<TileTreeReference>();\r\n if (this._classifierTreeRef)\r\n allTrees.push(this._classifierTreeRef);\r\n\r\n const projection = PlanarTextureProjection.computePlanarTextureProjection(this._plane, context, target, allTrees, viewState, this._width, this._height);\r\n if (!projection.textureFrustum || !projection.projectionMatrix || !projection.worldToViewMap)\r\n return;\r\n\r\n this._projectionMatrix = projection.projectionMatrix;\r\n this._frustum = projection.textureFrustum;\r\n this._debugFrustum = projection.debugFrustum;\r\n this._planarClipMaskOverrides = this._planarClipMask?.getPlanarClipMaskSymbologyOverrides();\r\n\r\n const drawTree = (treeRef: TileTreeReference, graphics: RenderGraphic[]) => {\r\n this._graphics = graphics;\r\n const drawArgs = GraphicsCollectorDrawArgs.create(context, this, treeRef, new FrustumPlanes(this._frustum), projection.worldToViewMap!);\r\n if (undefined !== drawArgs)\r\n treeRef.draw(drawArgs);\r\n\r\n this._graphics = undefined;\r\n };\r\n if (this._classifierTreeRef)\r\n drawTree(this._classifierTreeRef, this._classifierGraphics);\r\n\r\n if (maskTrees)\r\n maskTrees.forEach((maskTree) => drawTree(maskTree, this._maskGraphics));\r\n\r\n // Shader behaves slightly differently when classifying surfaces vs point clouds.\r\n this._isClassifyingPointCloud = target.isPointCloud;\r\n\r\n if (this._doDebugFrustum) {\r\n this._debugFrustumGraphic = dispose(this._debugFrustumGraphic);\r\n const builder = context.createSceneGraphicBuilder();\r\n\r\n builder.setSymbology(ColorDef.green, ColorDef.green, 1);\r\n builder.addFrustum(context.viewingSpace.getFrustum());\r\n builder.setSymbology(ColorDef.red, ColorDef.red, 1);\r\n builder.addFrustum(this._debugFrustum!);\r\n builder.setSymbology(ColorDef.white, ColorDef.white, 1);\r\n builder.addFrustum(this._frustum);\r\n this._debugFrustumGraphic = builder.finish();\r\n }\r\n }\r\n\r\n public draw(target: Target) {\r\n if (undefined === this._frustum)\r\n return;\r\n\r\n this._contentMode = PlanarClassifierContent.None;\r\n let combinationBuffer: ClassifierCombinationBuffer | undefined;\r\n if (this._classifierGraphics.length === 0) {\r\n if (this._maskGraphics.length === 0) {\r\n return;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.MaskOnly;\r\n }\r\n } else {\r\n if (undefined === this._classifierBuffers) {\r\n this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);\r\n if (undefined === this._classifierBuffers)\r\n return;\r\n }\r\n if (this._maskGraphics.length === 0) {\r\n if (undefined === this._classifierCombinedBuffer) {\r\n combinationBuffer = this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);\r\n if (undefined === this._classifierCombinedBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.ClassifierOnly;\r\n combinationBuffer = this._classifierCombinedBuffer;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n if (undefined === this._classifierAndMaskCombinedBuffer) {\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer = ClassifierAndMaskCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature, this._maskBuffer.texture);\r\n if (undefined === this._classifierAndMaskCombinedBuffer)\r\n return;\r\n }\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer;\r\n this._contentMode = PlanarClassifierContent.ClassifierAndMask;\r\n }\r\n }\r\n\r\n if (undefined !== this._debugFrustumGraphic)\r\n target.graphics.foreground.push(this._debugFrustumGraphic);\r\n\r\n // Temporarily override the Target's state.\r\n const system = System.instance;\r\n const maskViewFlags = {\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: !this.isClassifyingPointCloud, // point clouds don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n };\r\n const prevState = system.currentRenderState.clone(scratchPrevRenderState);\r\n system.context.viewport(0, 0, this._width, this._height);\r\n const vf = target.currentViewFlags.copy(this._classifierTreeRef ? this._classifierTreeRef.viewFlags : maskViewFlags);\r\n\r\n system.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n const prevOverrides = target.currentFeatureSymbologyOverrides;\r\n\r\n target.uniforms.style.changeBackgroundColor(this._bgColor); // Avoid white on white reversal. Will be reset in changeRenderPlan below.\r\n target.changeFrustum(this._frustum, this._frustum.getFraction(), true);\r\n this._anyTranslucent = false;\r\n\r\n const prevProjMatrix = target.uniforms.frustum.projectionMatrix;\r\n target.uniforms.frustum.changeProjectionMatrix(PlanarClassifier._postProjectionMatrix.multiplyMatrixMatrix(prevProjMatrix));\r\n target.uniforms.branch.changeRenderPlan(vf, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = this._renderCommands;\r\n const getDrawCommands = (graphics: RenderGraphic[]) => {\r\n this._batchState.reset();\r\n renderCommands.reset(target, this._branchStack, this._batchState);\r\n renderCommands.collectGraphicsForPlanarProjection(graphics);\r\n\r\n // Draw the classifiers into our attachments.\r\n // When using Display.ElementColor, the color and transparency come from the classifier geometry. Therefore we may need to draw the classified geometry\r\n // in a different pass - or both passes - depending on the transparency of the classifiers.\r\n // NB: \"Outside\" geometry by definition cannot take color/transparency from element...\r\n const cmds = renderCommands.getCommands(RenderPass.OpaquePlanar);\r\n\r\n // NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., \"planar\" polyface/bspsurf) we do not detect planarity.\r\n cmds.push(...renderCommands.getCommands(RenderPass.OpaqueGeneral));\r\n cmds.push(...renderCommands.getCommands(RenderPass.OpaqueLinear));\r\n this._anyOpaque = cmds.length > 0;\r\n const transCmds = renderCommands.getCommands(RenderPass.Translucent);\r\n if (transCmds.length > 0) {\r\n cmds.push(...transCmds);\r\n this._anyTranslucent = true;\r\n }\r\n return cmds;\r\n };\r\n\r\n if (this._classifierGraphics.length > 0 && this._classifierBuffers) {\r\n this._classifierBuffers.draw(getDrawCommands(this._classifierGraphics), target);\r\n\r\n // Draw any hilited classifiers.\r\n const hiliteCommands = renderCommands.getCommands(RenderPass.Hilite);\r\n this._anyHilited = 0 !== hiliteCommands.length;\r\n if (this._anyHilited)\r\n this._classifierBuffers.drawHilite(hiliteCommands, target);\r\n }\r\n if (this._maskGraphics.length > 0 && this._maskBuffer) {\r\n if (this._planarClipMaskOverrides)\r\n target.overrideFeatureSymbology(this._planarClipMaskOverrides);\r\n if (this._planarClipMask && this._planarClipMask.settings.transparency !== undefined && this._planarClipMask.settings.transparency > 0.0)\r\n this._anyTranslucent = true;\r\n\r\n this._maskBuffer.draw(getDrawCommands(this._maskGraphics), target);\r\n\r\n }\r\n if (combinationBuffer)\r\n combinationBuffer.compose(target);\r\n\r\n this._batchState.reset();\r\n target.changeRenderPlan(prevPlan);\r\n target.overrideFeatureSymbology(prevOverrides);\r\n\r\n system.applyRenderState(prevState);\r\n system.context.viewport(0, 0, target.viewRect.width, target.viewRect.height);\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Rendering
|
|
3
3
|
*/
|
|
4
|
-
import { Map4d, Matrix4d, Plane3dByOriginAndUnitNormal, Range1d, Transform } from "@itwin/core-geometry";
|
|
5
4
|
import { Frustum } from "@itwin/core-common";
|
|
6
|
-
import {
|
|
5
|
+
import { Map4d, Matrix4d, Plane3dByOriginAndUnitNormal, Range1d, Transform } from "@itwin/core-geometry";
|
|
7
6
|
import { Tile, TileTreeReference } from "../../tile/internal";
|
|
7
|
+
import { SceneContext } from "../../ViewContext";
|
|
8
8
|
import { ViewState3d } from "../../ViewState";
|
|
9
9
|
import { RenderState } from "./RenderState";
|
|
10
10
|
import { Target } from "./Target";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarTextureProjection.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EACgD,KAAK,EAAY,QAAQ,EAAE,4BAA4B,EAAW,OAAO,EACvH,SAAS,EACjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlanarTextureProjection.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACgD,KAAK,EAAY,QAAQ,EAAE,4BAA4B,EAAW,OAAO,EACvH,SAAS,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAA4H;WAErJ,8BAA8B,CAAC,YAAY,EAAE,4BAA4B,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;WA6I/Y,uBAAuB,CAAC,MAAM,EAAE,MAAM;;;;CAsBrD"}
|
|
@@ -8,11 +8,13 @@ exports.PlanarTextureProjection = void 0;
|
|
|
8
8
|
/** @packageDocumentation
|
|
9
9
|
* @module Rendering
|
|
10
10
|
*/
|
|
11
|
-
const core_geometry_1 = require("@itwin/core-geometry");
|
|
12
11
|
const core_common_1 = require("@itwin/core-common");
|
|
12
|
+
const core_geometry_1 = require("@itwin/core-geometry");
|
|
13
13
|
const ApproximateTerrainHeights_1 = require("../../ApproximateTerrainHeights");
|
|
14
14
|
const RenderState_1 = require("./RenderState");
|
|
15
15
|
const scratchRange = core_geometry_1.Range3d.createNull();
|
|
16
|
+
const scratchMap4d = core_geometry_1.Map4d.createIdentity();
|
|
17
|
+
const scratchMatrix4d = core_geometry_1.Matrix4d.createIdentity();
|
|
16
18
|
class PlanarTextureProjection {
|
|
17
19
|
static computePlanarTextureProjection(texturePlane, sceneContext, target, drapeRefs, viewState, textureWidth, textureHeight, _heightRange) {
|
|
18
20
|
const textureZ = texturePlane.getNormalRef();
|
|
@@ -133,8 +135,8 @@ class PlanarTextureProjection {
|
|
|
133
135
|
return {};
|
|
134
136
|
}
|
|
135
137
|
const worldToNpc = PlanarTextureProjection._postProjectionMatrixNpc.multiplyMatrixMatrix(frustumMap.transform0);
|
|
136
|
-
const npcToView = core_geometry_1.Map4d.createBoxMap(core_geometry_1.Point3d.create(0, 0, 0), core_geometry_1.Point3d.create(1, 1, 1), core_geometry_1.Point3d.create(0, 0, 0), core_geometry_1.Point3d.create(textureWidth, textureHeight, 1));
|
|
137
|
-
const npcToWorld = worldToNpc.createInverse();
|
|
138
|
+
const npcToView = core_geometry_1.Map4d.createBoxMap(core_geometry_1.Point3d.create(0, 0, 0), core_geometry_1.Point3d.create(1, 1, 1), core_geometry_1.Point3d.create(0, 0, 0), core_geometry_1.Point3d.create(textureWidth, textureHeight, 1), scratchMap4d);
|
|
139
|
+
const npcToWorld = worldToNpc.createInverse(scratchMatrix4d);
|
|
138
140
|
if (undefined === npcToWorld) {
|
|
139
141
|
return {};
|
|
140
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarTextureProjection.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport {\r\n ClipUtilities, ConvexClipPlaneSet, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Range1d, Range2d, Range3d,\r\n Ray3d, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { Frustum, FrustumPlanes, Npc, RenderMode } from \"@itwin/core-common\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { Tile, TileTreeReference } from \"../../tile/internal\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { Target } from \"./Target\";\r\n\r\nconst scratchRange = Range3d.createNull();\r\nexport class PlanarTextureProjection {\r\n private static _postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n public static computePlanarTextureProjection(texturePlane: Plane3dByOriginAndUnitNormal, sceneContext: SceneContext, target: { tiles: Tile[], location: Transform }, drapeRefs: TileTreeReference[], viewState: ViewState3d, textureWidth: number, textureHeight: number, _heightRange?: Range1d): { textureFrustum?: Frustum, worldToViewMap?: Map4d, projectionMatrix?: Matrix4d, debugFrustum?: Frustum, zValue?: number } {\r\n const textureZ = texturePlane.getNormalRef();\r\n const viewingSpace = sceneContext.viewingSpace;\r\n const viewX = viewingSpace.rotation.rowX();\r\n const viewZ = viewingSpace.rotation.rowZ();\r\n const minCrossMagnitude = 1.0E-4;\r\n\r\n if (viewZ === undefined)\r\n return {}; // View without depth?....\r\n\r\n let textureX = viewZ.crossProduct(textureZ);\r\n let textureY;\r\n if (textureX.magnitude() < minCrossMagnitude) {\r\n textureY = viewX.crossProduct(textureZ);\r\n textureX = textureY.crossProduct(textureZ).normalize()!;\r\n } else {\r\n textureX.normalizeInPlace();\r\n textureY = textureZ.crossProduct(textureX).normalize()!;\r\n }\r\n\r\n const frustumX = textureZ, frustumY = textureX, frustumZ = textureY;\r\n const textureMatrix = Matrix3d.createRows(frustumX, frustumY, frustumZ);\r\n const textureTransform = Transform.createRefs(Point3d.createZero(), textureMatrix);\r\n const viewFrustum = viewingSpace.getFrustum().transformBy(textureTransform);\r\n const viewPlanes = new FrustumPlanes(viewFrustum);\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(viewPlanes.planes!);\r\n\r\n let textureRange = Range3d.createNull();\r\n const tileToTexture = textureTransform.multiplyTransformTransform(target.location);\r\n for (const tile of target.tiles) {\r\n textureRange.extendRange(tileToTexture.multiplyRange(tile.range, scratchRange));\r\n }\r\n\r\n if (textureRange.isNull)\r\n return {};\r\n\r\n textureRange = ClipUtilities.rangeOfClipperIntersectionWithRange(viewClipPlanes, textureRange);\r\n\r\n const drapeRange = Range3d.createNull();\r\n for (const drapeRef of drapeRefs) {\r\n const drapeTree = drapeRef.treeOwner.tileTree;\r\n\r\n if (!drapeTree)\r\n return {};\r\n if (drapeTree.isContentUnbounded) {\r\n let heightRange = viewingSpace.getTerrainHeightRange();\r\n if (!heightRange) heightRange = ApproximateTerrainHeights.instance.globalHeightRange;\r\n\r\n textureRange.low.x = Math.min(textureRange.low.x, heightRange.low);\r\n textureRange.high.x = Math.max(textureRange.high.x, heightRange.high);\r\n } else {\r\n const contentRange = textureTransform.multiplyRange(drapeRef.computeWorldContentRange());\r\n if (!contentRange.isNull)\r\n drapeRange.extendRange(contentRange);\r\n }\r\n }\r\n if (!drapeRange.isNull) {\r\n // Union of height\r\n textureRange.low.x = Math.min(textureRange.low.x, drapeRange.low.x);\r\n textureRange.high.x = Math.max(textureRange.high.x, drapeRange.high.x);\r\n\r\n // Intersection of texture extents.\r\n textureRange.low.y = Math.max(textureRange.low.y, drapeRange.low.y);\r\n textureRange.high.y = Math.min(textureRange.high.y, drapeRange.high.y);\r\n textureRange.low.z = Math.max(textureRange.low.z, drapeRange.low.z);\r\n textureRange.high.z = Math.min(textureRange.high.z, drapeRange.high.z);\r\n }\r\n\r\n const epsilon = .01;\r\n textureRange.low.x -= epsilon;\r\n textureRange.high.x += epsilon;\r\n\r\n const textureFrustum = Frustum.fromRange(textureRange);\r\n const debugFrustum = textureFrustum.clone();\r\n textureTransform.multiplyInversePoint3dArray(debugFrustum.points, debugFrustum.points);\r\n\r\n if (viewState.isCameraOn) {\r\n const eyeHeight = (textureRange.low.x + textureRange.high.x) / 2.0;\r\n const eyePlane = Plane3dByOriginAndUnitNormal.create(Point3d.createScale(textureZ, eyeHeight), textureZ); // Centered in range - parallel to texture.\r\n const projectionRay = Ray3d.create(viewState.getEyePoint(), viewZ.crossProduct(textureX).normalize()!);\r\n let projectionDistance = projectionRay.intersectionWithPlane(eyePlane!);\r\n const minNearToFarRatio = .01; // Smaller value allows texture projection to conform tightly to view frustum.\r\n if (undefined !== projectionDistance) {\r\n projectionDistance = Math.max(.1, projectionDistance);\r\n const eyePoint = textureTransform.multiplyPoint3d(projectionRay.fractionToPoint(projectionDistance));\r\n let near = eyePoint.z - textureRange.high.z;\r\n let far = eyePoint.z - textureRange.low.z;\r\n\r\n if (near / far < minNearToFarRatio) {\r\n // If the near-far ratio is less than minimum move the camera back.\r\n far = (textureRange.high.z - textureRange.low.z) / (1.0 - minNearToFarRatio);\r\n near = far * minNearToFarRatio;\r\n eyePoint.z = near + textureRange.high.z;\r\n }\r\n const farRange = Range2d.createNull();\r\n const nearRange = Range2d.createNull();\r\n // Create a frustum that includes the entire view frustum and all Z values.\r\n nearRange.low.x = textureRange.low.x;\r\n nearRange.high.x = textureRange.high.x;\r\n farRange.low.x = eyePoint.x + far / near * (textureRange.low.x - eyePoint.x);\r\n farRange.high.x = eyePoint.x + far / near * (textureRange.high.x - eyePoint.x);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, textureRange, (points: GrowableXYZArray) => {\r\n points.getPoint3dArray().forEach((rangePoint) => {\r\n const farScale = far / (eyePoint.z - rangePoint.z);\r\n const nearScale = near / (eyePoint.z - rangePoint.z);\r\n const nearY = eyePoint.y + nearScale * (rangePoint.y - eyePoint.y);\r\n const farY = eyePoint.y + farScale * (rangePoint.y - eyePoint.y);\r\n nearRange.low.y = Math.min(nearRange.low.y, nearY);\r\n nearRange.high.y = Math.max(nearRange.high.y, nearY);\r\n farRange.low.y = Math.min(farRange.low.y, farY);\r\n farRange.high.y = Math.max(farRange.high.y, farY);\r\n });\r\n });\r\n textureFrustum.points[Npc._000].set(farRange.low.x, farRange.low.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._100].set(farRange.high.x, farRange.low.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._010].set(farRange.low.x, farRange.high.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._110].set(farRange.high.x, farRange.high.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._001].set(nearRange.low.x, nearRange.low.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._101].set(nearRange.high.x, nearRange.low.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._011].set(nearRange.low.x, nearRange.high.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._111].set(nearRange.high.x, nearRange.high.y, eyePoint.z - near);\r\n }\r\n }\r\n textureMatrix.transposeInPlace();\r\n textureMatrix.multiplyVectorArrayInPlace(textureFrustum.points);\r\n const frustumMap = textureFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n return {};\r\n }\r\n const worldToNpc = PlanarTextureProjection._postProjectionMatrixNpc.multiplyMatrixMatrix(frustumMap.transform0);\r\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(textureWidth, textureHeight, 1))!;\r\n const npcToWorld = worldToNpc.createInverse();\r\n if (undefined === npcToWorld) {\r\n return {};\r\n }\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n const worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n\r\n return { textureFrustum, projectionMatrix: worldToNpc, worldToViewMap, debugFrustum };\r\n }\r\n\r\n public static getTextureDrawingParams(target: Target) {\r\n const state = new RenderState();\r\n state.flags.depthMask = false;\r\n state.flags.blend = false;\r\n state.flags.depthTest = false;\r\n\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n return { state, viewFlags };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"PlanarTextureProjection.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { Frustum, FrustumPlanes, Npc, RenderMode } from \"@itwin/core-common\";\r\nimport {\r\n ClipUtilities, ConvexClipPlaneSet, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Range1d, Range2d, Range3d,\r\n Ray3d, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { Tile, TileTreeReference } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { Target } from \"./Target\";\r\n\r\nconst scratchRange = Range3d.createNull();\r\nconst scratchMap4d = Map4d.createIdentity();\r\nconst scratchMatrix4d = Matrix4d.createIdentity();\r\nexport class PlanarTextureProjection {\r\n private static _postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n public static computePlanarTextureProjection(texturePlane: Plane3dByOriginAndUnitNormal, sceneContext: SceneContext, target: { tiles: Tile[], location: Transform }, drapeRefs: TileTreeReference[], viewState: ViewState3d, textureWidth: number, textureHeight: number, _heightRange?: Range1d): { textureFrustum?: Frustum, worldToViewMap?: Map4d, projectionMatrix?: Matrix4d, debugFrustum?: Frustum, zValue?: number } {\r\n const textureZ = texturePlane.getNormalRef();\r\n const viewingSpace = sceneContext.viewingSpace;\r\n const viewX = viewingSpace.rotation.rowX();\r\n const viewZ = viewingSpace.rotation.rowZ();\r\n const minCrossMagnitude = 1.0E-4;\r\n\r\n if (viewZ === undefined)\r\n return {}; // View without depth?....\r\n\r\n let textureX = viewZ.crossProduct(textureZ);\r\n let textureY;\r\n if (textureX.magnitude() < minCrossMagnitude) {\r\n textureY = viewX.crossProduct(textureZ);\r\n textureX = textureY.crossProduct(textureZ).normalize()!;\r\n } else {\r\n textureX.normalizeInPlace();\r\n textureY = textureZ.crossProduct(textureX).normalize()!;\r\n }\r\n\r\n const frustumX = textureZ, frustumY = textureX, frustumZ = textureY;\r\n const textureMatrix = Matrix3d.createRows(frustumX, frustumY, frustumZ);\r\n const textureTransform = Transform.createRefs(Point3d.createZero(), textureMatrix);\r\n const viewFrustum = viewingSpace.getFrustum().transformBy(textureTransform);\r\n const viewPlanes = new FrustumPlanes(viewFrustum);\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(viewPlanes.planes!);\r\n\r\n let textureRange = Range3d.createNull();\r\n const tileToTexture = textureTransform.multiplyTransformTransform(target.location);\r\n for (const tile of target.tiles) {\r\n textureRange.extendRange(tileToTexture.multiplyRange(tile.range, scratchRange));\r\n }\r\n\r\n if (textureRange.isNull)\r\n return {};\r\n\r\n textureRange = ClipUtilities.rangeOfClipperIntersectionWithRange(viewClipPlanes, textureRange);\r\n\r\n const drapeRange = Range3d.createNull();\r\n for (const drapeRef of drapeRefs) {\r\n const drapeTree = drapeRef.treeOwner.tileTree;\r\n\r\n if (!drapeTree)\r\n return {};\r\n if (drapeTree.isContentUnbounded) {\r\n let heightRange = viewingSpace.getTerrainHeightRange();\r\n if (!heightRange) heightRange = ApproximateTerrainHeights.instance.globalHeightRange;\r\n\r\n textureRange.low.x = Math.min(textureRange.low.x, heightRange.low);\r\n textureRange.high.x = Math.max(textureRange.high.x, heightRange.high);\r\n } else {\r\n const contentRange = textureTransform.multiplyRange(drapeRef.computeWorldContentRange());\r\n if (!contentRange.isNull)\r\n drapeRange.extendRange(contentRange);\r\n }\r\n }\r\n if (!drapeRange.isNull) {\r\n // Union of height\r\n textureRange.low.x = Math.min(textureRange.low.x, drapeRange.low.x);\r\n textureRange.high.x = Math.max(textureRange.high.x, drapeRange.high.x);\r\n\r\n // Intersection of texture extents.\r\n textureRange.low.y = Math.max(textureRange.low.y, drapeRange.low.y);\r\n textureRange.high.y = Math.min(textureRange.high.y, drapeRange.high.y);\r\n textureRange.low.z = Math.max(textureRange.low.z, drapeRange.low.z);\r\n textureRange.high.z = Math.min(textureRange.high.z, drapeRange.high.z);\r\n }\r\n\r\n const epsilon = .01;\r\n textureRange.low.x -= epsilon;\r\n textureRange.high.x += epsilon;\r\n\r\n const textureFrustum = Frustum.fromRange(textureRange);\r\n const debugFrustum = textureFrustum.clone();\r\n textureTransform.multiplyInversePoint3dArray(debugFrustum.points, debugFrustum.points);\r\n\r\n if (viewState.isCameraOn) {\r\n const eyeHeight = (textureRange.low.x + textureRange.high.x) / 2.0;\r\n const eyePlane = Plane3dByOriginAndUnitNormal.create(Point3d.createScale(textureZ, eyeHeight), textureZ); // Centered in range - parallel to texture.\r\n const projectionRay = Ray3d.create(viewState.getEyePoint(), viewZ.crossProduct(textureX).normalize()!);\r\n let projectionDistance = projectionRay.intersectionWithPlane(eyePlane!);\r\n const minNearToFarRatio = .01; // Smaller value allows texture projection to conform tightly to view frustum.\r\n if (undefined !== projectionDistance) {\r\n projectionDistance = Math.max(.1, projectionDistance);\r\n const eyePoint = textureTransform.multiplyPoint3d(projectionRay.fractionToPoint(projectionDistance));\r\n let near = eyePoint.z - textureRange.high.z;\r\n let far = eyePoint.z - textureRange.low.z;\r\n\r\n if (near / far < minNearToFarRatio) {\r\n // If the near-far ratio is less than minimum move the camera back.\r\n far = (textureRange.high.z - textureRange.low.z) / (1.0 - minNearToFarRatio);\r\n near = far * minNearToFarRatio;\r\n eyePoint.z = near + textureRange.high.z;\r\n }\r\n const farRange = Range2d.createNull();\r\n const nearRange = Range2d.createNull();\r\n // Create a frustum that includes the entire view frustum and all Z values.\r\n nearRange.low.x = textureRange.low.x;\r\n nearRange.high.x = textureRange.high.x;\r\n farRange.low.x = eyePoint.x + far / near * (textureRange.low.x - eyePoint.x);\r\n farRange.high.x = eyePoint.x + far / near * (textureRange.high.x - eyePoint.x);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, textureRange, (points: GrowableXYZArray) => {\r\n points.getPoint3dArray().forEach((rangePoint) => {\r\n const farScale = far / (eyePoint.z - rangePoint.z);\r\n const nearScale = near / (eyePoint.z - rangePoint.z);\r\n const nearY = eyePoint.y + nearScale * (rangePoint.y - eyePoint.y);\r\n const farY = eyePoint.y + farScale * (rangePoint.y - eyePoint.y);\r\n nearRange.low.y = Math.min(nearRange.low.y, nearY);\r\n nearRange.high.y = Math.max(nearRange.high.y, nearY);\r\n farRange.low.y = Math.min(farRange.low.y, farY);\r\n farRange.high.y = Math.max(farRange.high.y, farY);\r\n });\r\n });\r\n textureFrustum.points[Npc._000].set(farRange.low.x, farRange.low.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._100].set(farRange.high.x, farRange.low.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._010].set(farRange.low.x, farRange.high.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._110].set(farRange.high.x, farRange.high.y, eyePoint.z - far);\r\n textureFrustum.points[Npc._001].set(nearRange.low.x, nearRange.low.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._101].set(nearRange.high.x, nearRange.low.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._011].set(nearRange.low.x, nearRange.high.y, eyePoint.z - near);\r\n textureFrustum.points[Npc._111].set(nearRange.high.x, nearRange.high.y, eyePoint.z - near);\r\n }\r\n }\r\n textureMatrix.transposeInPlace();\r\n textureMatrix.multiplyVectorArrayInPlace(textureFrustum.points);\r\n const frustumMap = textureFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n return {};\r\n }\r\n const worldToNpc = PlanarTextureProjection._postProjectionMatrixNpc.multiplyMatrixMatrix(frustumMap.transform0);\r\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(textureWidth, textureHeight, 1), scratchMap4d)!;\r\n const npcToWorld = worldToNpc.createInverse(scratchMatrix4d);\r\n if (undefined === npcToWorld) {\r\n return {};\r\n }\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n const worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n\r\n return { textureFrustum, projectionMatrix: worldToNpc, worldToViewMap, debugFrustum };\r\n }\r\n\r\n public static getTextureDrawingParams(target: Target) {\r\n const state = new RenderState();\r\n state.flags.depthMask = false;\r\n state.flags.blend = false;\r\n state.flags.depthTest = false;\r\n\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n return { state, viewFlags };\r\n }\r\n}\r\n"]}
|
|
@@ -2,25 +2,43 @@
|
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
4
|
import { IDisposable } from "@itwin/core-bentley";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { IndexedGeometry, IndexedGeometryParams } from "./CachedGeometry";
|
|
9
|
-
import { Matrix4 } from "./Matrix";
|
|
10
|
-
import { RealityMeshPrimitive } from "../primitives/mesh/RealityMeshPrimitive";
|
|
5
|
+
import { ColorDef, RenderTexture } from "@itwin/core-common";
|
|
6
|
+
import { Matrix4d, Range2d, Range3d, Transform } from "@itwin/core-geometry";
|
|
7
|
+
import { RealityMeshGraphicParams, RealityMeshPrimitive } from "../primitives/mesh/RealityMeshPrimitive";
|
|
11
8
|
import { TerrainMeshPrimitive } from "../primitives/mesh/TerrainMeshPrimitive";
|
|
12
9
|
import { RenderGraphic } from "../RenderGraphic";
|
|
13
10
|
import { RenderMemory } from "../RenderMemory";
|
|
11
|
+
import { RenderPlanarClassifier } from "../RenderPlanarClassifier";
|
|
14
12
|
import { RenderSystem, TerrainTexture } from "../RenderSystem";
|
|
13
|
+
import { BufferHandle, QBufferHandle2d, QBufferHandle3d } from "./AttributeBuffers";
|
|
14
|
+
import { IndexedGeometry, IndexedGeometryParams } from "./CachedGeometry";
|
|
15
|
+
import { Matrix4 } from "./Matrix";
|
|
16
|
+
import { PlanarClassifier } from "./PlanarClassifier";
|
|
15
17
|
import { RenderOrder } from "./RenderFlags";
|
|
16
18
|
import { Target } from "./Target";
|
|
17
19
|
import { TechniqueId } from "./TechniqueId";
|
|
20
|
+
declare class ProjectedTexture {
|
|
21
|
+
meshParams: RealityMeshGraphicParams;
|
|
22
|
+
targetRectangle: Range2d;
|
|
23
|
+
classifier: PlanarClassifier;
|
|
24
|
+
constructor(classifier: RenderPlanarClassifier, meshParams: RealityMeshGraphicParams, targetRectangle: Range2d);
|
|
25
|
+
clone(targetRectangle: Range2d): ProjectedTexture;
|
|
26
|
+
}
|
|
27
|
+
declare type TerrainOrProjectedTexture = TerrainTexture | ProjectedTexture;
|
|
28
|
+
declare class RealityTextureParam {
|
|
29
|
+
texture: RenderTexture | undefined;
|
|
30
|
+
private _projectedTextureOrMatrix;
|
|
31
|
+
constructor(texture: RenderTexture | undefined, _projectedTextureOrMatrix: ProjectedTexture | Matrix4);
|
|
32
|
+
get isProjected(): boolean;
|
|
33
|
+
getProjectionMatrix(): Matrix4d | undefined;
|
|
34
|
+
getTerrainMatrix(): Matrix4 | undefined;
|
|
35
|
+
getParams(result: Matrix4): Matrix4;
|
|
36
|
+
}
|
|
18
37
|
/** @internal */
|
|
19
38
|
export declare class RealityTextureParams {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
static create(terrainTextures: TerrainTexture[]): RealityTextureParams;
|
|
39
|
+
params: RealityTextureParam[];
|
|
40
|
+
constructor(params: RealityTextureParam[]);
|
|
41
|
+
static create(textures: TerrainOrProjectedTexture[]): RealityTextureParams;
|
|
24
42
|
}
|
|
25
43
|
/** @internal */
|
|
26
44
|
export declare class RealityMeshGeometryParams extends IndexedGeometryParams {
|
|
@@ -54,11 +72,12 @@ export declare class RealityMeshGeometry extends IndexedGeometry implements IDis
|
|
|
54
72
|
static createFromTerrainMesh(terrainMesh: TerrainMeshPrimitive, transform: Transform | undefined): RealityMeshGeometry | undefined;
|
|
55
73
|
static createFromRealityMesh(realityMesh: RealityMeshPrimitive): RealityMeshGeometry | undefined;
|
|
56
74
|
getRange(): Range3d;
|
|
57
|
-
static createGraphic(system: RenderSystem,
|
|
75
|
+
static createGraphic(system: RenderSystem, params: RealityMeshGraphicParams): RenderGraphic | undefined;
|
|
58
76
|
collectStatistics(stats: RenderMemory.Statistics): void;
|
|
59
77
|
get techniqueId(): TechniqueId;
|
|
60
78
|
getPass(target: Target): "none" | "opaque" | "translucent";
|
|
61
79
|
get renderOrder(): RenderOrder;
|
|
62
80
|
draw(): void;
|
|
63
81
|
}
|
|
82
|
+
export {};
|
|
64
83
|
//# sourceMappingURL=RealityMesh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAmB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"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"}
|