@itwin/core-frontend 3.6.0-dev.5 → 3.6.0-dev.50
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/CHANGELOG.md +36 -1
- package/LICENSE.md +1 -1
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +3 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +2 -2
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +3 -0
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/Tiles.d.ts +4 -0
- package/lib/cjs/Tiles.d.ts.map +1 -1
- package/lib/cjs/Tiles.js +11 -0
- package/lib/cjs/Tiles.js.map +1 -1
- package/lib/cjs/ViewContext.js +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +2 -3
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +4 -5
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +0 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +48 -3
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +56 -2
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionRuntime.js +3 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +3 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/render/MockRender.js +3 -0
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +9 -5
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.d.ts +5 -5
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +6 -4
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.d.ts +40 -0
- package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/EDL.js +264 -0
- package/lib/cjs/render/webgl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
- package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
- package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/Layer.js +2 -2
- package/lib/cjs/render/webgl/LayerCommands.js +2 -2
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +9 -8
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
- package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.js +2 -0
- package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +8 -3
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +46 -38
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +8 -6
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +195 -76
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +3 -3
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/cjs/render/webgl/Target.js +7 -7
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +18 -3
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.js +1 -2
- package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
- package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/tile/GltfReader.js +1 -1
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +1 -1
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +5 -5
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +2 -1
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +2 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +9 -4
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +1 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +3 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +26 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +54 -4
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +7 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +12 -8
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +5 -0
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +33 -13
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +42 -3
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +126 -9
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +2 -2
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -2
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +3 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +2 -2
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +3 -0
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/Tiles.d.ts +4 -0
- package/lib/esm/Tiles.d.ts.map +1 -1
- package/lib/esm/Tiles.js +11 -0
- package/lib/esm/Tiles.js.map +1 -1
- package/lib/esm/ViewContext.js +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +2 -3
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/ViewState.d.ts +4 -5
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +0 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +48 -3
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +57 -3
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionRuntime.js +5 -2
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +3 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/MockRender.d.ts.map +1 -1
- package/lib/esm/render/MockRender.js +3 -0
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.d.ts +3 -4
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +10 -6
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/VisibleFeature.d.ts +5 -5
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +3 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +69 -0
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +6 -4
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/EDL.d.ts +40 -0
- package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/EDL.js +260 -0
- package/lib/esm/render/webgl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/EdgeSettings.js +2 -2
- package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrameBuffer.js +9 -0
- package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/render/webgl/Layer.js +2 -2
- package/lib/esm/render/webgl/LayerCommands.js +2 -2
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +9 -8
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
- package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointCloud.js +2 -0
- package/lib/esm/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +8 -3
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +46 -38
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +8 -6
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +194 -77
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/esm/render/webgl/Target.js +7 -7
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +18 -3
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.js +1 -2
- package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
- package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/EDL.js +253 -0
- package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/esm/tile/DynamicIModelTile.js +1 -1
- package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/tile/GltfReader.js +1 -1
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +1 -1
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +5 -5
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +2 -1
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +2 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +5 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +9 -4
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +1 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +3 -0
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +3 -0
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +26 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +53 -4
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +7 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +12 -8
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +5 -0
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +33 -13
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +42 -3
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +126 -9
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +2 -2
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -2
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/package.json +22 -23
|
@@ -21,7 +21,7 @@ export class RenderCommands {
|
|
|
21
21
|
constructor(target, stack, batchState) {
|
|
22
22
|
this._scratchFrustum = new Frustum();
|
|
23
23
|
this._scratchRange = new Range3d();
|
|
24
|
-
this._commands = new Array(
|
|
24
|
+
this._commands = new Array(21 /* COUNT */);
|
|
25
25
|
this._forcedRenderPass = 255 /* None */;
|
|
26
26
|
this._addLayersAsNormalGraphics = false;
|
|
27
27
|
this._opaqueOverrides = false;
|
|
@@ -31,7 +31,7 @@ export class RenderCommands {
|
|
|
31
31
|
this._stack = stack;
|
|
32
32
|
this._batchState = batchState;
|
|
33
33
|
this._layers = new LayerCommandLists(this);
|
|
34
|
-
for (let i = 0; i <
|
|
34
|
+
for (let i = 0; i < 21 /* COUNT */; ++i)
|
|
35
35
|
this._commands[i] = [];
|
|
36
36
|
}
|
|
37
37
|
get target() { return this._target; }
|
|
@@ -47,8 +47,8 @@ export class RenderCommands {
|
|
|
47
47
|
get isDrawingLayers() {
|
|
48
48
|
switch (this._forcedRenderPass) {
|
|
49
49
|
case 1 /* OpaqueLayers */:
|
|
50
|
-
case
|
|
51
|
-
case
|
|
50
|
+
case 7 /* TranslucentLayers */:
|
|
51
|
+
case 11 /* OverlayLayers */:
|
|
52
52
|
return true;
|
|
53
53
|
default:
|
|
54
54
|
return false;
|
|
@@ -57,9 +57,9 @@ export class RenderCommands {
|
|
|
57
57
|
get currentViewFlags() { return this._stack.top.viewFlags; }
|
|
58
58
|
get compositeFlags() {
|
|
59
59
|
let flags = 0 /* None */;
|
|
60
|
-
if (this.hasCommands(
|
|
60
|
+
if (this.hasCommands(8 /* Translucent */))
|
|
61
61
|
flags |= 1 /* Translucent */;
|
|
62
|
-
if (this.hasCommands(
|
|
62
|
+
if (this.hasCommands(10 /* Hilite */) || this.hasCommands(16 /* HiliteClassification */) || this.hasCommands(18 /* HilitePlanarClassification */))
|
|
63
63
|
flags |= 2 /* Hilite */;
|
|
64
64
|
if (this.target.wantAmbientOcclusion)
|
|
65
65
|
flags |= 4 /* AmbientOcclusion */;
|
|
@@ -67,7 +67,7 @@ export class RenderCommands {
|
|
|
67
67
|
}
|
|
68
68
|
get _curBatch() { return this._batchState.currentBatch; }
|
|
69
69
|
hasCommands(pass) { return 0 !== this.getCommands(pass).length; }
|
|
70
|
-
isOpaquePass(pass) { return pass >= 2 /* OpaqueLinear */ && pass <=
|
|
70
|
+
isOpaquePass(pass) { return pass >= 2 /* OpaqueLinear */ && pass <= 5 /* OpaqueGeneral */; }
|
|
71
71
|
reset(target, stack, batchState) {
|
|
72
72
|
this._target = target;
|
|
73
73
|
this._stack = stack;
|
|
@@ -88,13 +88,13 @@ export class RenderCommands {
|
|
|
88
88
|
}
|
|
89
89
|
/** Add backgroundMap graphics to their own render pass. */
|
|
90
90
|
addBackgroundMapGraphics(backgroundMapGraphics) {
|
|
91
|
-
this._forcedRenderPass =
|
|
91
|
+
this._forcedRenderPass = 15 /* BackgroundMap */;
|
|
92
92
|
backgroundMapGraphics.forEach((entry) => entry.addCommands(this));
|
|
93
93
|
this._forcedRenderPass = 255 /* None */;
|
|
94
94
|
}
|
|
95
95
|
/** Add overlay graphics to the world overlay pass */
|
|
96
96
|
addOverlayGraphics(overlayGraphics) {
|
|
97
|
-
this._forcedRenderPass =
|
|
97
|
+
this._forcedRenderPass = 12 /* WorldOverlay */;
|
|
98
98
|
overlayGraphics.forEach((entry) => entry.addCommands(this));
|
|
99
99
|
this._forcedRenderPass = 255 /* None */;
|
|
100
100
|
}
|
|
@@ -143,7 +143,7 @@ export class RenderCommands {
|
|
|
143
143
|
if (undefined === gf)
|
|
144
144
|
return;
|
|
145
145
|
assert(255 /* None */ === this._forcedRenderPass);
|
|
146
|
-
this._forcedRenderPass =
|
|
146
|
+
this._forcedRenderPass = 14 /* SkyBox */;
|
|
147
147
|
this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));
|
|
148
148
|
this._forcedRenderPass = 255 /* None */;
|
|
149
149
|
}
|
|
@@ -202,7 +202,7 @@ export class RenderCommands {
|
|
|
202
202
|
break;
|
|
203
203
|
case 4 /* LitSurface */:
|
|
204
204
|
case 3 /* UnlitSurface */:
|
|
205
|
-
opaquePass =
|
|
205
|
+
opaquePass = 5 /* OpaqueGeneral */;
|
|
206
206
|
break;
|
|
207
207
|
default:
|
|
208
208
|
opaquePass = 2 /* OpaqueLinear */;
|
|
@@ -213,7 +213,7 @@ export class RenderCommands {
|
|
|
213
213
|
}
|
|
214
214
|
const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);
|
|
215
215
|
if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)
|
|
216
|
-
this.getCommands(
|
|
216
|
+
this.getCommands(8 /* Translucent */).push(command);
|
|
217
217
|
if (!Pass.rendersOpaqueAndTranslucent(pass))
|
|
218
218
|
this.getCommands(Pass.toRenderPass(pass)).push(command);
|
|
219
219
|
}
|
|
@@ -247,7 +247,7 @@ export class RenderCommands {
|
|
|
247
247
|
// GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.
|
|
248
248
|
// It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.
|
|
249
249
|
assert(this._forcedRenderPass === 255 /* None */);
|
|
250
|
-
this._forcedRenderPass =
|
|
250
|
+
this._forcedRenderPass = 5 /* OpaqueGeneral */;
|
|
251
251
|
layer.graphic.addCommands(this);
|
|
252
252
|
this._forcedRenderPass = 255 /* None */;
|
|
253
253
|
return;
|
|
@@ -310,9 +310,9 @@ export class RenderCommands {
|
|
|
310
310
|
}
|
|
311
311
|
pushAndPop(push, pop, func) {
|
|
312
312
|
if (this.isDrawingLayers) {
|
|
313
|
-
this._commands[
|
|
313
|
+
this._commands[10 /* Hilite */].push(push);
|
|
314
314
|
this._layers.pushAndPop(push, pop, func);
|
|
315
|
-
const cmds = this._commands[
|
|
315
|
+
const cmds = this._commands[10 /* Hilite */];
|
|
316
316
|
if (0 < cmds.length && cmds[cmds.length - 1] === push)
|
|
317
317
|
cmds.pop();
|
|
318
318
|
else
|
|
@@ -327,7 +327,7 @@ export class RenderCommands {
|
|
|
327
327
|
else {
|
|
328
328
|
// May want to add hilite commands as well - add the push command to that pass.
|
|
329
329
|
this._commands[this._forcedRenderPass].push(push);
|
|
330
|
-
this._commands[
|
|
330
|
+
this._commands[10 /* Hilite */].push(push);
|
|
331
331
|
}
|
|
332
332
|
func();
|
|
333
333
|
// Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.
|
|
@@ -342,13 +342,13 @@ export class RenderCommands {
|
|
|
342
342
|
}
|
|
343
343
|
else {
|
|
344
344
|
assert(0 < this._commands[this._forcedRenderPass].length);
|
|
345
|
-
assert(0 < this._commands[
|
|
345
|
+
assert(0 < this._commands[10 /* Hilite */].length);
|
|
346
346
|
let cmds = this._commands[this._forcedRenderPass];
|
|
347
347
|
if (cmds[cmds.length - 1] === push)
|
|
348
348
|
cmds.pop();
|
|
349
349
|
else
|
|
350
350
|
cmds.push(pop);
|
|
351
|
-
cmds = this._commands[
|
|
351
|
+
cmds = this._commands[10 /* Hilite */];
|
|
352
352
|
if (cmds[cmds.length - 1] === push)
|
|
353
353
|
cmds.pop();
|
|
354
354
|
else
|
|
@@ -386,18 +386,26 @@ export class RenderCommands {
|
|
|
386
386
|
this._commands.forEach((cmds) => cmds.splice(0));
|
|
387
387
|
this._layers.clear();
|
|
388
388
|
}
|
|
389
|
-
|
|
389
|
+
initForPickOverlayDecorations(overlays) {
|
|
390
|
+
for (const overlay of overlays) {
|
|
391
|
+
const gf = overlay;
|
|
392
|
+
if (gf.isPickable)
|
|
393
|
+
gf.addCommands(this);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
initForPickOverlays(sceneOverlays, worldOverlayDecorations, viewOverlayDecorations) {
|
|
390
397
|
this._clearCommands();
|
|
391
398
|
this._addTranslucentAsOpaque = true;
|
|
392
399
|
for (const sceneGf of sceneOverlays)
|
|
393
400
|
sceneGf.addCommands(this);
|
|
394
|
-
if (
|
|
401
|
+
if (worldOverlayDecorations === null || worldOverlayDecorations === void 0 ? void 0 : worldOverlayDecorations.length) {
|
|
395
402
|
this.pushAndPopState(this.target.decorationsState, () => {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
403
|
+
this.initForPickOverlayDecorations(worldOverlayDecorations);
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
if (viewOverlayDecorations === null || viewOverlayDecorations === void 0 ? void 0 : viewOverlayDecorations.length) {
|
|
407
|
+
this.pushAndPopState(this.target.decorationsState.withViewCoords(), () => {
|
|
408
|
+
this.initForPickOverlayDecorations(viewOverlayDecorations);
|
|
401
409
|
});
|
|
402
410
|
}
|
|
403
411
|
this._addTranslucentAsOpaque = false;
|
|
@@ -435,9 +443,9 @@ export class RenderCommands {
|
|
|
435
443
|
this.addWorldDecorations(dec.world);
|
|
436
444
|
this.pushAndPopState(this.target.decorationsState, () => {
|
|
437
445
|
if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)
|
|
438
|
-
this.addDecorations(dec.viewOverlay,
|
|
446
|
+
this.addDecorations(dec.viewOverlay, 13 /* ViewOverlay */);
|
|
439
447
|
if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)
|
|
440
|
-
this.addDecorations(dec.worldOverlay,
|
|
448
|
+
this.addDecorations(dec.worldOverlay, 12 /* WorldOverlay */);
|
|
441
449
|
});
|
|
442
450
|
}
|
|
443
451
|
this.setupClassificationByVolume();
|
|
@@ -463,7 +471,7 @@ export class RenderCommands {
|
|
|
463
471
|
if (255 /* None */ === this._forcedRenderPass && prim.isEdge) {
|
|
464
472
|
const vf = this.target.currentViewFlags;
|
|
465
473
|
if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)
|
|
466
|
-
this.getCommands(
|
|
474
|
+
this.getCommands(9 /* HiddenEdge */).push(command);
|
|
467
475
|
}
|
|
468
476
|
}
|
|
469
477
|
addBranch(branch) {
|
|
@@ -472,25 +480,25 @@ export class RenderCommands {
|
|
|
472
480
|
});
|
|
473
481
|
}
|
|
474
482
|
computeBatchHiliteRenderPass(batch) {
|
|
475
|
-
let pass =
|
|
483
|
+
let pass = 10 /* Hilite */;
|
|
476
484
|
if (batch.graphic instanceof MeshGraphic) {
|
|
477
485
|
const mg = batch.graphic;
|
|
478
486
|
if (SurfaceType.VolumeClassifier === mg.surfaceType)
|
|
479
|
-
pass =
|
|
487
|
+
pass = 16 /* HiliteClassification */;
|
|
480
488
|
}
|
|
481
489
|
else if (batch.graphic instanceof GraphicsArray) {
|
|
482
490
|
const ga = batch.graphic;
|
|
483
491
|
if (ga.graphics[0] instanceof MeshGraphic) {
|
|
484
492
|
const mg = ga.graphics[0];
|
|
485
493
|
if (SurfaceType.VolumeClassifier === mg.surfaceType)
|
|
486
|
-
pass =
|
|
494
|
+
pass = 16 /* HiliteClassification */;
|
|
487
495
|
}
|
|
488
496
|
else if (ga.graphics[0] instanceof Branch) {
|
|
489
497
|
const b = ga.graphics[0];
|
|
490
498
|
if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof MeshGraphic) {
|
|
491
499
|
const mg = b.branch.entries[0];
|
|
492
500
|
if (SurfaceType.VolumeClassifier === mg.surfaceType)
|
|
493
|
-
pass =
|
|
501
|
+
pass = 16 /* HiliteClassification */;
|
|
494
502
|
}
|
|
495
503
|
}
|
|
496
504
|
}
|
|
@@ -536,30 +544,30 @@ export class RenderCommands {
|
|
|
536
544
|
let savedForcedRenderPass = 255 /* None */;
|
|
537
545
|
if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {
|
|
538
546
|
savedForcedRenderPass = this._forcedRenderPass;
|
|
539
|
-
this._forcedRenderPass =
|
|
547
|
+
this._forcedRenderPass = 20 /* VolumeClassifiedRealityData */;
|
|
540
548
|
}
|
|
541
549
|
batch.graphic.addCommands(this);
|
|
542
|
-
if (
|
|
550
|
+
if (20 /* VolumeClassifiedRealityData */ === this._forcedRenderPass)
|
|
543
551
|
this._forcedRenderPass = savedForcedRenderPass;
|
|
544
552
|
// If the batch contains hilited features, need to render them in the hilite pass
|
|
545
553
|
const anyHilited = overrides.anyHilited;
|
|
546
554
|
const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;
|
|
547
555
|
if (anyHilited || planarClassifierHilited)
|
|
548
|
-
batch.graphic.addHiliteCommands(this, planarClassifierHilited ?
|
|
556
|
+
batch.graphic.addHiliteCommands(this, planarClassifierHilited ? 18 /* HilitePlanarClassification */ : this.computeBatchHiliteRenderPass(batch));
|
|
549
557
|
});
|
|
550
558
|
this._opaqueOverrides = this._translucentOverrides = false;
|
|
551
559
|
this._batchState.pop();
|
|
552
560
|
}
|
|
553
561
|
// Define a culling frustum. Commands associated with Graphics whose ranges do not intersect the frustum will be skipped.
|
|
554
|
-
setCheckRange(frustum) { this._frustumPlanes =
|
|
562
|
+
setCheckRange(frustum) { this._frustumPlanes = FrustumPlanes.fromFrustum(frustum); }
|
|
555
563
|
// Clear the culling frustum.
|
|
556
564
|
clearCheckRange() { this._frustumPlanes = undefined; }
|
|
557
565
|
setupClassificationByVolume() {
|
|
558
566
|
// To make it easier to process the classifiers individually, set up a secondary command list for them where they
|
|
559
567
|
// are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports
|
|
560
568
|
// nested branches and batches.
|
|
561
|
-
const groupedCmds = this._commands[
|
|
562
|
-
const byIndexCmds = this._commands[
|
|
569
|
+
const groupedCmds = this._commands[6 /* Classification */];
|
|
570
|
+
const byIndexCmds = this._commands[17 /* ClassificationByIndex */];
|
|
563
571
|
const pushCommands = []; // will contain current set of pushes ahead of a primitive
|
|
564
572
|
for (const cmd of groupedCmds) {
|
|
565
573
|
switch (cmd.opcode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderCommands.js","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, FrustumPlanes, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Decorations } from \"../Decorations\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { AnimationBranchState } from \"../GraphicBranch\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport {\r\n DrawCommands, PopBatchCommand, PopBranchCommand, PopClipCommand, PopCommand, PrimitiveCommand, PushBatchCommand,\r\n PushBranchCommand, PushClipCommand, PushCommand, PushStateCommand,\r\n} from \"./DrawCommand\";\r\nimport { Batch, Branch, Graphic, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LayerCommandLists } from \"./LayerCommands\";\r\nimport { MeshGraphic } from \"./Mesh\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { CompositeFlags, Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { TargetGraphics } from \"./TargetGraphics\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\n\r\n/** A list of DrawCommands to be rendered, ordered by render pass.\r\n * @internal\r\n */\r\nexport class RenderCommands implements Iterable<DrawCommands> {\r\n private _frustumPlanes?: FrustumPlanes;\r\n private readonly _scratchFrustum = new Frustum();\r\n private readonly _scratchRange = new Range3d();\r\n private readonly _commands = new Array<DrawCommands>(RenderPass.COUNT);\r\n private _target: Target;\r\n private _stack: BranchStack; // refers to the Target's BranchStack\r\n private _batchState: BatchState; // refers to the Target's BatchState\r\n private _forcedRenderPass: RenderPass = RenderPass.None;\r\n private _addLayersAsNormalGraphics = false;\r\n private _opaqueOverrides = false;\r\n private _translucentOverrides = false;\r\n private _addTranslucentAsOpaque = false; // true when rendering for _ReadPixels to force translucent items to be drawn in opaque pass.\r\n private readonly _layers: LayerCommandLists;\r\n\r\n public get target(): Target { return this._target; }\r\n\r\n public [Symbol.iterator](): Iterator<DrawCommands> {\r\n return this._commands[Symbol.iterator]();\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n for (const commands of this._commands)\r\n if (0 < commands.length)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public get isDrawingLayers() {\r\n switch (this._forcedRenderPass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public get currentViewFlags(): ViewFlags { return this._stack.top.viewFlags; }\r\n public get compositeFlags(): CompositeFlags {\r\n let flags = CompositeFlags.None;\r\n if (this.hasCommands(RenderPass.Translucent))\r\n flags |= CompositeFlags.Translucent;\r\n\r\n if (this.hasCommands(RenderPass.Hilite) || this.hasCommands(RenderPass.HiliteClassification) || this.hasCommands(RenderPass.HilitePlanarClassification))\r\n flags |= CompositeFlags.Hilite;\r\n\r\n if (this.target.wantAmbientOcclusion)\r\n flags |= CompositeFlags.AmbientOcclusion;\r\n\r\n return flags;\r\n }\r\n\r\n private get _curBatch(): Batch | undefined { return this._batchState.currentBatch; }\r\n\r\n public hasCommands(pass: RenderPass): boolean { return 0 !== this.getCommands(pass).length; }\r\n public isOpaquePass(pass: RenderPass): boolean { return pass >= RenderPass.OpaqueLinear && pass <= RenderPass.OpaqueGeneral; }\r\n\r\n constructor(target: Target, stack: BranchStack, batchState: BatchState) {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this._layers = new LayerCommandLists(this);\r\n\r\n for (let i = 0; i < RenderPass.COUNT; ++i)\r\n this._commands[i] = [];\r\n }\r\n\r\n public reset(target: Target, stack: BranchStack, batchState: BatchState): void {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this.clear();\r\n }\r\n\r\n public collectGraphicsForPlanarProjection(scene: GraphicList): void {\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n assert(!this._addLayersAsNormalGraphics);\r\n\r\n this._addLayersAsNormalGraphics = true;\r\n this.addGraphics(scene);\r\n this._addLayersAsNormalGraphics = false;\r\n }\r\n\r\n public addGraphics(scene: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n scene.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n /** Add backgroundMap graphics to their own render pass. */\r\n public addBackgroundMapGraphics(backgroundMapGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.BackgroundMap;\r\n backgroundMapGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n /** Add overlay graphics to the world overlay pass */\r\n public addOverlayGraphics(overlayGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.WorldOverlay;\r\n overlayGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addDecorations(dec: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n for (const entry of dec) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addWorldDecorations(decs: GraphicList): void {\r\n const world = this.target.getWorldDecorations(decs);\r\n this.pushAndPopBranch(world, () => {\r\n for (const entry of world.branch.entries) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n private addPickableDecorations(decs: Decorations): void {\r\n if (undefined !== decs.normal) {\r\n for (const normal of decs.normal) {\r\n const gf = normal as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n }\r\n\r\n if (undefined !== decs.world) {\r\n const world = this.target.getWorldDecorations(decs.world);\r\n this.pushAndPopBranch(world, () => {\r\n for (const gf of world.branch.entries) {\r\n if ((gf as Graphic).isPickable)\r\n (gf as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public addBackground(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.Background;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addSkyBox(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.SkyBox;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addPrimitiveCommand(command: PrimitiveCommand, pass?: Pass): void {\r\n if (undefined === pass)\r\n pass = command.getPass(this.target);\r\n\r\n if (\"none\" === pass) // Edges will return none if they don't want to draw at all (edges not turned on).\r\n return;\r\n\r\n if (RenderPass.None !== this._forcedRenderPass) {\r\n // Add the command to the forced render pass (background).\r\n this.getCommands(this._forcedRenderPass).push(command);\r\n return;\r\n }\r\n\r\n if (!command.hasFeatures) {\r\n // Draw in general opaque pass so they are not in pick data.\r\n switch (pass) {\r\n case \"opaque-linear\":\r\n case \"opaque-planar\":\r\n pass = \"opaque\";\r\n break;\r\n case \"opaque-planar-translucent\":\r\n pass = \"opaque-translucent\";\r\n break;\r\n }\r\n }\r\n\r\n const haveFeatureOverrides = (this._opaqueOverrides || this._translucentOverrides) && command.opcode && command.hasFeatures;\r\n\r\n if (Pass.rendersTranslucent(pass) && this._addTranslucentAsOpaque) {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n pass = \"opaque-planar\";\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n pass = \"opaque\";\r\n break;\r\n default:\r\n pass = \"opaque-linear\";\r\n break;\r\n }\r\n }\r\n\r\n const isDoublePass = Pass.rendersOpaqueAndTranslucent(pass);\r\n const renderTranslucentDuringOpaque = isDoublePass || (this._opaqueOverrides && haveFeatureOverrides);\r\n if (renderTranslucentDuringOpaque && Pass.rendersTranslucent(pass) && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {\r\n let opaquePass: RenderPass;\r\n if (Pass.rendersOpaqueAndTranslucent(pass)) {\r\n opaquePass = Pass.toOpaquePass(pass);\r\n } else {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n opaquePass = RenderPass.OpaquePlanar;\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n opaquePass = RenderPass.OpaqueGeneral;\r\n break;\r\n default:\r\n opaquePass = RenderPass.OpaqueLinear;\r\n break;\r\n }\r\n }\r\n\r\n this.getCommands(opaquePass).push(command);\r\n }\r\n\r\n const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);\r\n if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)\r\n this.getCommands(RenderPass.Translucent).push(command);\r\n\r\n if (!Pass.rendersOpaqueAndTranslucent(pass))\r\n this.getCommands(Pass.toRenderPass(pass)).push(command);\r\n }\r\n\r\n public getCommands(pass: RenderPass): DrawCommands {\r\n let idx = pass as number;\r\n assert(idx < this._commands.length);\r\n if (idx >= this._commands.length)\r\n idx -= 1;\r\n\r\n return this._commands[idx];\r\n }\r\n\r\n public replaceCommands(pass: RenderPass, cmds: DrawCommands): void {\r\n const idx = pass as number;\r\n this._commands[idx].splice(0);\r\n this._commands[idx] = cmds;\r\n }\r\n\r\n public addHiliteBranch(branch: Branch, pass: RenderPass): void {\r\n this.pushAndPopBranchForPass(pass, branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addHiliteCommands(this, pass));\r\n });\r\n }\r\n\r\n public processLayers(container: LayerContainer): void {\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n if (RenderPass.None !== this._forcedRenderPass)\r\n return;\r\n\r\n this._forcedRenderPass = container.renderPass;\r\n this._layers.processLayers(container, () => container.graphic.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addLayerCommands(layer: Layer): void {\r\n if (this._addLayersAsNormalGraphics) {\r\n // GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.\r\n // It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n this._forcedRenderPass = RenderPass.OpaqueGeneral;\r\n layer.graphic.addCommands(this);\r\n this._forcedRenderPass = RenderPass.None;\r\n return;\r\n }\r\n\r\n assert(this.isDrawingLayers);\r\n if (!this.isDrawingLayers)\r\n return;\r\n\r\n // Let the graphic add its commands. Afterward, pull them out and add them to the LayerCommands.\r\n this._layers.currentLayer = layer;\r\n layer.graphic.addCommands(this);\r\n\r\n const cmds = this.getCommands(this._forcedRenderPass);\r\n this._layers.addCommands(cmds);\r\n\r\n cmds.length = 0;\r\n this._layers.currentLayer = undefined;\r\n }\r\n\r\n public addHiliteLayerCommands(graphic: Graphic, pass: RenderPass): void {\r\n assert(this.isDrawingLayers || this._addLayersAsNormalGraphics);\r\n if (!this.isDrawingLayers && !this._addLayersAsNormalGraphics)\r\n return;\r\n\r\n const prevPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.None;\r\n\r\n graphic.addHiliteCommands(this, pass);\r\n\r\n this._forcedRenderPass = prevPass;\r\n }\r\n\r\n private getAnimationBranchState(branch: Branch): AnimationBranchState | undefined {\r\n const animId = branch.branch.animationId;\r\n return undefined !== animId ? this.target.animationBranches?.branchStates.get(animId) : undefined;\r\n }\r\n\r\n private pushAndPopBranchForPass(pass: RenderPass, branch: Branch, func: () => void): void {\r\n assert(!this.isDrawingLayers);\r\n\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n assert(RenderPass.None !== pass);\r\n\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n const cmds = this.getCommands(pass);\r\n const clip = animState?.clip as ClipVolume | undefined;\r\n const pushClip = undefined !== clip ? new PushClipCommand(clip) : undefined;\r\n if (pushClip)\r\n cmds.push(pushClip);\r\n\r\n const push = new PushBranchCommand(branch);\r\n cmds.push(push);\r\n\r\n func();\r\n\r\n this._stack.pop();\r\n if (cmds[cmds.length - 1] === push) {\r\n cmds.pop();\r\n if (pushClip)\r\n cmds.pop();\r\n } else {\r\n cmds.push(PopBranchCommand.instance);\r\n if (pushClip)\r\n cmds.push(PopClipCommand.instance);\r\n }\r\n }\r\n\r\n private pushAndPop(push: PushCommand, pop: PopCommand, func: () => void): void {\r\n if (this.isDrawingLayers) {\r\n this._commands[RenderPass.Hilite].push(push);\r\n this._layers.pushAndPop(push, pop, func);\r\n\r\n const cmds = this._commands[RenderPass.Hilite];\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n return;\r\n }\r\n\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n // Need to make sure the push command precedes any subsequent commands added to any render pass.\r\n for (const cmds of this._commands)\r\n cmds.push(push);\r\n } else {\r\n // May want to add hilite commands as well - add the push command to that pass.\r\n this._commands[this._forcedRenderPass].push(push);\r\n this._commands[RenderPass.Hilite].push(push);\r\n }\r\n\r\n func();\r\n\r\n // Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n for (const cmds of this._commands) {\r\n assert(0 < cmds.length);\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n } else {\r\n assert(0 < this._commands[this._forcedRenderPass].length);\r\n assert(0 < this._commands[RenderPass.Hilite].length);\r\n\r\n let cmds = this._commands[this._forcedRenderPass];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n cmds = this._commands[RenderPass.Hilite];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n }\r\n\r\n public pushAndPopBranch(branch: Branch, func: () => void): void {\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n if (animState?.clip)\r\n this.pushAndPop(new PushClipCommand(animState.clip as ClipVolume), PopClipCommand.instance, () => this._pushAndPopBranch(branch, func));\r\n else\r\n this._pushAndPopBranch(branch, func);\r\n }\r\n\r\n private _pushAndPopBranch(branch: Branch, func: () => void): void {\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n this.pushAndPop(new PushBranchCommand(branch), PopBranchCommand.instance, func);\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushAndPopState(state: BranchState, func: () => void): void {\r\n this._stack.pushState(state);\r\n this.pushAndPop(new PushStateCommand(state), PopBranchCommand.instance, func);\r\n this._stack.pop();\r\n }\r\n\r\n public clear(): void {\r\n assert(this._batchState.isEmpty);\r\n this._clearCommands();\r\n }\r\n\r\n private _clearCommands(): void {\r\n this._commands.forEach((cmds: DrawCommands) => cmds.splice(0));\r\n this._layers.clear();\r\n }\r\n\r\n public initForPickOverlays(sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void {\r\n this._clearCommands();\r\n\r\n this._addTranslucentAsOpaque = true;\r\n\r\n for (const sceneGf of sceneOverlays)\r\n (sceneGf as Graphic).addCommands(this);\r\n\r\n if (undefined !== overlayDecorations) {\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n for (const overlay of overlayDecorations) {\r\n const gf = overlay as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n this._addTranslucentAsOpaque = false;\r\n }\r\n\r\n public initForReadPixels(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n // Set flag to force translucent geometry to be put into the opaque pass.\r\n this._addTranslucentAsOpaque = true;\r\n\r\n // Add the scene graphics.\r\n this.addGraphics(gfx.foreground);\r\n\r\n // Also add any pickable decorations.\r\n if (undefined !== gfx.decorations)\r\n this.addPickableDecorations(gfx.decorations);\r\n\r\n // Also background map is pickable\r\n this.addBackgroundMapGraphics(gfx.background);\r\n\r\n this._addTranslucentAsOpaque = false;\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public initForRender(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n this.addGraphics(gfx.foreground);\r\n this.addBackgroundMapGraphics(gfx.background);\r\n this.addOverlayGraphics(gfx.overlays);\r\n\r\n const dynamics = gfx.dynamics;\r\n if (dynamics && dynamics.length > 0)\r\n this.addDecorations(dynamics);\r\n\r\n const dec = gfx.decorations;\r\n if (undefined !== dec) {\r\n this.addBackground(dec.viewBackground as Graphic);\r\n\r\n this.addSkyBox(dec.skyBox as Graphic);\r\n\r\n if (undefined !== dec.normal && 0 < dec.normal.length)\r\n this.addGraphics(dec.normal);\r\n\r\n if (undefined !== dec.world && 0 < dec.world.length)\r\n this.addWorldDecorations(dec.world);\r\n\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)\r\n this.addDecorations(dec.viewOverlay, RenderPass.ViewOverlay);\r\n\r\n if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)\r\n this.addDecorations(dec.worldOverlay, RenderPass.WorldOverlay);\r\n });\r\n }\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public addPrimitive(prim: Primitive): void {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isGeometryOutsideActiveVolume(prim.cachedGeometry))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) { // See if we can cull this primitive.\r\n if (\"classification\" === prim.getPass(this.target)) {\r\n const geom = prim.cachedGeometry;\r\n geom.computeRange(this._scratchRange);\r\n let frustum = Frustum.fromRange(this._scratchRange, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const command = new PrimitiveCommand(prim);\r\n this.addPrimitiveCommand(command);\r\n\r\n if (RenderPass.None === this._forcedRenderPass && prim.isEdge) {\r\n const vf: ViewFlags = this.target.currentViewFlags;\r\n if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)\r\n this.getCommands(RenderPass.HiddenEdge).push(command);\r\n }\r\n }\r\n\r\n public addBranch(branch: Branch): void {\r\n this.pushAndPopBranch(branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n });\r\n }\r\n\r\n public computeBatchHiliteRenderPass(batch: Batch): RenderPass {\r\n let pass = RenderPass.Hilite;\r\n if (batch.graphic instanceof MeshGraphic) {\r\n const mg = batch.graphic;\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (batch.graphic instanceof GraphicsArray) {\r\n const ga = batch.graphic;\r\n if (ga.graphics[0] instanceof MeshGraphic) {\r\n const mg = ga.graphics[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (ga.graphics[0] instanceof Branch) {\r\n const b = ga.graphics[0];\r\n if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof MeshGraphic) {\r\n const mg = b.branch.entries[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n }\r\n }\r\n }\r\n return pass;\r\n }\r\n\r\n public addBatch(batch: Batch): void {\r\n if (batch.locateOnly && !this.target.isReadPixelsInProgress)\r\n return;\r\n\r\n // Batches (aka element tiles) should only draw during ordinary (translucent or opaque) passes.\r\n // They may draw during both, or neither.\r\n // NB: This is no longer true - pickable overlay decorations are defined as Batches. Problem?\r\n // assert(RenderPass.None === this._forcedRenderPass);\r\n assert(!this._opaqueOverrides && !this._translucentOverrides);\r\n assert(undefined === this._curBatch);\r\n\r\n // If all features are overridden to be invisible, draw no graphics in this batch\r\n const overrides = batch.getOverrides(this.target);\r\n if (overrides.allHidden)\r\n return;\r\n\r\n if (!batch.range.isNull) {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isRangeOutsideActiveVolume(batch.range))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) {\r\n let frustum = Frustum.fromRange(batch.range, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const classifier = this._stack.top.planarClassifier;\r\n\r\n this._batchState.push(batch, true);\r\n\r\n this.pushAndPop(new PushBatchCommand(batch), PopBatchCommand.instance, () => {\r\n if (this.currentViewFlags.transparency || overrides.anyViewIndependentTranslucent) {\r\n this._opaqueOverrides = overrides.anyOpaque;\r\n this._translucentOverrides = overrides.anyTranslucent;\r\n\r\n if (undefined !== classifier) {\r\n this._opaqueOverrides = this._opaqueOverrides || classifier.anyOpaque;\r\n this._translucentOverrides = this._translucentOverrides || classifier.anyTranslucent;\r\n }\r\n }\r\n\r\n // If we have an active volume classifier then force all batches for the reality data being classified into a special render pass.\r\n let savedForcedRenderPass = RenderPass.None;\r\n if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {\r\n savedForcedRenderPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.VolumeClassifiedRealityData;\r\n }\r\n\r\n (batch.graphic as Graphic).addCommands(this);\r\n\r\n if (RenderPass.VolumeClassifiedRealityData === this._forcedRenderPass)\r\n this._forcedRenderPass = savedForcedRenderPass;\r\n\r\n // If the batch contains hilited features, need to render them in the hilite pass\r\n const anyHilited = overrides.anyHilited;\r\n const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;\r\n if (anyHilited || planarClassifierHilited)\r\n (batch.graphic as Graphic).addHiliteCommands(this, planarClassifierHilited ? RenderPass.HilitePlanarClassification : this.computeBatchHiliteRenderPass(batch));\r\n\r\n });\r\n\r\n this._opaqueOverrides = this._translucentOverrides = false;\r\n this._batchState.pop();\r\n }\r\n\r\n // Define a culling frustum. Commands associated with Graphics whose ranges do not intersect the frustum will be skipped.\r\n public setCheckRange(frustum: Frustum) { this._frustumPlanes = new FrustumPlanes(frustum); }\r\n // Clear the culling frustum.\r\n public clearCheckRange(): void { this._frustumPlanes = undefined; }\r\n\r\n private setupClassificationByVolume(): void {\r\n // To make it easier to process the classifiers individually, set up a secondary command list for them where they\r\n // are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports\r\n // nested branches and batches.\r\n const groupedCmds = this._commands[RenderPass.Classification];\r\n const byIndexCmds = this._commands[RenderPass.ClassificationByIndex];\r\n const pushCommands: DrawCommands = []; // will contain current set of pushes ahead of a primitive\r\n for (const cmd of groupedCmds) {\r\n switch (cmd.opcode) {\r\n case \"pushBranch\":\r\n case \"pushBatch\":\r\n case \"pushState\":\r\n pushCommands.push(cmd);\r\n break;\r\n case \"drawPrimitive\":\r\n for (const pushCmd of pushCommands) {\r\n byIndexCmds.push(pushCmd);\r\n }\r\n byIndexCmds.push(cmd);\r\n for (let i = pushCommands.length - 1; i >= 0; --i) {\r\n if (\"pushBatch\" === pushCommands[i].opcode)\r\n byIndexCmds.push(PopBatchCommand.instance);\r\n else // should be eith pushBranch or pushState opcode\r\n byIndexCmds.push(PopBranchCommand.instance);\r\n }\r\n break;\r\n case \"popBatch\":\r\n case \"popBranch\":\r\n pushCommands.pop();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n public dump(): Array<{ name: string, count: number }> {\r\n const dump = [\r\n { name: \"Primitives\", count: 0 },\r\n { name: \"Batches\", count: 0 },\r\n { name: \"Branches\", count: 0 },\r\n ];\r\n\r\n for (const cmds of this._commands) {\r\n for (const cmd of cmds) {\r\n let index;\r\n switch (cmd.opcode) {\r\n case \"drawPrimitive\":\r\n index = 0;\r\n break;\r\n case \"pushBatch\":\r\n index = 1;\r\n break;\r\n case \"pushBranch\":\r\n index = 2;\r\n break;\r\n default:\r\n continue;\r\n }\r\n\r\n dump[index].count++;\r\n }\r\n }\r\n\r\n return dump;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RenderCommands.js","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, FrustumPlanes, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Decorations } from \"../Decorations\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { AnimationBranchState } from \"../GraphicBranch\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport {\r\n DrawCommands, PopBatchCommand, PopBranchCommand, PopClipCommand, PopCommand, PrimitiveCommand, PushBatchCommand,\r\n PushBranchCommand, PushClipCommand, PushCommand, PushStateCommand,\r\n} from \"./DrawCommand\";\r\nimport { Batch, Branch, Graphic, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LayerCommandLists } from \"./LayerCommands\";\r\nimport { MeshGraphic } from \"./Mesh\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { CompositeFlags, Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { TargetGraphics } from \"./TargetGraphics\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\n\r\n/** A list of DrawCommands to be rendered, ordered by render pass.\r\n * @internal\r\n */\r\nexport class RenderCommands implements Iterable<DrawCommands> {\r\n private _frustumPlanes?: FrustumPlanes;\r\n private readonly _scratchFrustum = new Frustum();\r\n private readonly _scratchRange = new Range3d();\r\n private readonly _commands = new Array<DrawCommands>(RenderPass.COUNT);\r\n private _target: Target;\r\n private _stack: BranchStack; // refers to the Target's BranchStack\r\n private _batchState: BatchState; // refers to the Target's BatchState\r\n private _forcedRenderPass: RenderPass = RenderPass.None;\r\n private _addLayersAsNormalGraphics = false;\r\n private _opaqueOverrides = false;\r\n private _translucentOverrides = false;\r\n private _addTranslucentAsOpaque = false; // true when rendering for _ReadPixels to force translucent items to be drawn in opaque pass.\r\n private readonly _layers: LayerCommandLists;\r\n\r\n public get target(): Target { return this._target; }\r\n\r\n public [Symbol.iterator](): Iterator<DrawCommands> {\r\n return this._commands[Symbol.iterator]();\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n for (const commands of this._commands)\r\n if (0 < commands.length)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public get isDrawingLayers() {\r\n switch (this._forcedRenderPass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public get currentViewFlags(): ViewFlags { return this._stack.top.viewFlags; }\r\n public get compositeFlags(): CompositeFlags {\r\n let flags = CompositeFlags.None;\r\n if (this.hasCommands(RenderPass.Translucent))\r\n flags |= CompositeFlags.Translucent;\r\n\r\n if (this.hasCommands(RenderPass.Hilite) || this.hasCommands(RenderPass.HiliteClassification) || this.hasCommands(RenderPass.HilitePlanarClassification))\r\n flags |= CompositeFlags.Hilite;\r\n\r\n if (this.target.wantAmbientOcclusion)\r\n flags |= CompositeFlags.AmbientOcclusion;\r\n\r\n return flags;\r\n }\r\n\r\n private get _curBatch(): Batch | undefined { return this._batchState.currentBatch; }\r\n\r\n public hasCommands(pass: RenderPass): boolean { return 0 !== this.getCommands(pass).length; }\r\n public isOpaquePass(pass: RenderPass): boolean { return pass >= RenderPass.OpaqueLinear && pass <= RenderPass.OpaqueGeneral; }\r\n\r\n constructor(target: Target, stack: BranchStack, batchState: BatchState) {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this._layers = new LayerCommandLists(this);\r\n\r\n for (let i = 0; i < RenderPass.COUNT; ++i)\r\n this._commands[i] = [];\r\n }\r\n\r\n public reset(target: Target, stack: BranchStack, batchState: BatchState): void {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this.clear();\r\n }\r\n\r\n public collectGraphicsForPlanarProjection(scene: GraphicList): void {\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n assert(!this._addLayersAsNormalGraphics);\r\n\r\n this._addLayersAsNormalGraphics = true;\r\n this.addGraphics(scene);\r\n this._addLayersAsNormalGraphics = false;\r\n }\r\n\r\n public addGraphics(scene: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n scene.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n /** Add backgroundMap graphics to their own render pass. */\r\n public addBackgroundMapGraphics(backgroundMapGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.BackgroundMap;\r\n backgroundMapGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n /** Add overlay graphics to the world overlay pass */\r\n public addOverlayGraphics(overlayGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.WorldOverlay;\r\n overlayGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addDecorations(dec: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n for (const entry of dec) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addWorldDecorations(decs: GraphicList): void {\r\n const world = this.target.getWorldDecorations(decs);\r\n this.pushAndPopBranch(world, () => {\r\n for (const entry of world.branch.entries) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n private addPickableDecorations(decs: Decorations): void {\r\n if (undefined !== decs.normal) {\r\n for (const normal of decs.normal) {\r\n const gf = normal as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n }\r\n\r\n if (undefined !== decs.world) {\r\n const world = this.target.getWorldDecorations(decs.world);\r\n this.pushAndPopBranch(world, () => {\r\n for (const gf of world.branch.entries) {\r\n if ((gf as Graphic).isPickable)\r\n (gf as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public addBackground(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.Background;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addSkyBox(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.SkyBox;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addPrimitiveCommand(command: PrimitiveCommand, pass?: Pass): void {\r\n if (undefined === pass)\r\n pass = command.getPass(this.target);\r\n\r\n if (\"none\" === pass) // Edges will return none if they don't want to draw at all (edges not turned on).\r\n return;\r\n\r\n if (RenderPass.None !== this._forcedRenderPass) {\r\n // Add the command to the forced render pass (background).\r\n this.getCommands(this._forcedRenderPass).push(command);\r\n return;\r\n }\r\n\r\n if (!command.hasFeatures) {\r\n // Draw in general opaque pass so they are not in pick data.\r\n switch (pass) {\r\n case \"opaque-linear\":\r\n case \"opaque-planar\":\r\n pass = \"opaque\";\r\n break;\r\n case \"opaque-planar-translucent\":\r\n pass = \"opaque-translucent\";\r\n break;\r\n }\r\n }\r\n\r\n const haveFeatureOverrides = (this._opaqueOverrides || this._translucentOverrides) && command.opcode && command.hasFeatures;\r\n\r\n if (Pass.rendersTranslucent(pass) && this._addTranslucentAsOpaque) {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n pass = \"opaque-planar\";\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n pass = \"opaque\";\r\n break;\r\n default:\r\n pass = \"opaque-linear\";\r\n break;\r\n }\r\n }\r\n\r\n const isDoublePass = Pass.rendersOpaqueAndTranslucent(pass);\r\n const renderTranslucentDuringOpaque = isDoublePass || (this._opaqueOverrides && haveFeatureOverrides);\r\n if (renderTranslucentDuringOpaque && Pass.rendersTranslucent(pass) && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {\r\n let opaquePass: RenderPass;\r\n if (Pass.rendersOpaqueAndTranslucent(pass)) {\r\n opaquePass = Pass.toOpaquePass(pass);\r\n } else {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n opaquePass = RenderPass.OpaquePlanar;\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n opaquePass = RenderPass.OpaqueGeneral;\r\n break;\r\n default:\r\n opaquePass = RenderPass.OpaqueLinear;\r\n break;\r\n }\r\n }\r\n\r\n this.getCommands(opaquePass).push(command);\r\n }\r\n\r\n const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);\r\n if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)\r\n this.getCommands(RenderPass.Translucent).push(command);\r\n\r\n if (!Pass.rendersOpaqueAndTranslucent(pass))\r\n this.getCommands(Pass.toRenderPass(pass)).push(command);\r\n }\r\n\r\n public getCommands(pass: RenderPass): DrawCommands {\r\n let idx = pass as number;\r\n assert(idx < this._commands.length);\r\n if (idx >= this._commands.length)\r\n idx -= 1;\r\n\r\n return this._commands[idx];\r\n }\r\n\r\n public replaceCommands(pass: RenderPass, cmds: DrawCommands): void {\r\n const idx = pass as number;\r\n this._commands[idx].splice(0);\r\n this._commands[idx] = cmds;\r\n }\r\n\r\n public addHiliteBranch(branch: Branch, pass: RenderPass): void {\r\n this.pushAndPopBranchForPass(pass, branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addHiliteCommands(this, pass));\r\n });\r\n }\r\n\r\n public processLayers(container: LayerContainer): void {\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n if (RenderPass.None !== this._forcedRenderPass)\r\n return;\r\n\r\n this._forcedRenderPass = container.renderPass;\r\n this._layers.processLayers(container, () => container.graphic.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addLayerCommands(layer: Layer): void {\r\n if (this._addLayersAsNormalGraphics) {\r\n // GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.\r\n // It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n this._forcedRenderPass = RenderPass.OpaqueGeneral;\r\n layer.graphic.addCommands(this);\r\n this._forcedRenderPass = RenderPass.None;\r\n return;\r\n }\r\n\r\n assert(this.isDrawingLayers);\r\n if (!this.isDrawingLayers)\r\n return;\r\n\r\n // Let the graphic add its commands. Afterward, pull them out and add them to the LayerCommands.\r\n this._layers.currentLayer = layer;\r\n layer.graphic.addCommands(this);\r\n\r\n const cmds = this.getCommands(this._forcedRenderPass);\r\n this._layers.addCommands(cmds);\r\n\r\n cmds.length = 0;\r\n this._layers.currentLayer = undefined;\r\n }\r\n\r\n public addHiliteLayerCommands(graphic: Graphic, pass: RenderPass): void {\r\n assert(this.isDrawingLayers || this._addLayersAsNormalGraphics);\r\n if (!this.isDrawingLayers && !this._addLayersAsNormalGraphics)\r\n return;\r\n\r\n const prevPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.None;\r\n\r\n graphic.addHiliteCommands(this, pass);\r\n\r\n this._forcedRenderPass = prevPass;\r\n }\r\n\r\n private getAnimationBranchState(branch: Branch): AnimationBranchState | undefined {\r\n const animId = branch.branch.animationId;\r\n return undefined !== animId ? this.target.animationBranches?.branchStates.get(animId) : undefined;\r\n }\r\n\r\n private pushAndPopBranchForPass(pass: RenderPass, branch: Branch, func: () => void): void {\r\n assert(!this.isDrawingLayers);\r\n\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n assert(RenderPass.None !== pass);\r\n\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n const cmds = this.getCommands(pass);\r\n const clip = animState?.clip as ClipVolume | undefined;\r\n const pushClip = undefined !== clip ? new PushClipCommand(clip) : undefined;\r\n if (pushClip)\r\n cmds.push(pushClip);\r\n\r\n const push = new PushBranchCommand(branch);\r\n cmds.push(push);\r\n\r\n func();\r\n\r\n this._stack.pop();\r\n if (cmds[cmds.length - 1] === push) {\r\n cmds.pop();\r\n if (pushClip)\r\n cmds.pop();\r\n } else {\r\n cmds.push(PopBranchCommand.instance);\r\n if (pushClip)\r\n cmds.push(PopClipCommand.instance);\r\n }\r\n }\r\n\r\n private pushAndPop(push: PushCommand, pop: PopCommand, func: () => void): void {\r\n if (this.isDrawingLayers) {\r\n this._commands[RenderPass.Hilite].push(push);\r\n this._layers.pushAndPop(push, pop, func);\r\n\r\n const cmds = this._commands[RenderPass.Hilite];\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n return;\r\n }\r\n\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n // Need to make sure the push command precedes any subsequent commands added to any render pass.\r\n for (const cmds of this._commands)\r\n cmds.push(push);\r\n } else {\r\n // May want to add hilite commands as well - add the push command to that pass.\r\n this._commands[this._forcedRenderPass].push(push);\r\n this._commands[RenderPass.Hilite].push(push);\r\n }\r\n\r\n func();\r\n\r\n // Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n for (const cmds of this._commands) {\r\n assert(0 < cmds.length);\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n } else {\r\n assert(0 < this._commands[this._forcedRenderPass].length);\r\n assert(0 < this._commands[RenderPass.Hilite].length);\r\n\r\n let cmds = this._commands[this._forcedRenderPass];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n cmds = this._commands[RenderPass.Hilite];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n }\r\n\r\n public pushAndPopBranch(branch: Branch, func: () => void): void {\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n if (animState?.clip)\r\n this.pushAndPop(new PushClipCommand(animState.clip as ClipVolume), PopClipCommand.instance, () => this._pushAndPopBranch(branch, func));\r\n else\r\n this._pushAndPopBranch(branch, func);\r\n }\r\n\r\n private _pushAndPopBranch(branch: Branch, func: () => void): void {\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n this.pushAndPop(new PushBranchCommand(branch), PopBranchCommand.instance, func);\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushAndPopState(state: BranchState, func: () => void): void {\r\n this._stack.pushState(state);\r\n this.pushAndPop(new PushStateCommand(state), PopBranchCommand.instance, func);\r\n this._stack.pop();\r\n }\r\n\r\n public clear(): void {\r\n assert(this._batchState.isEmpty);\r\n this._clearCommands();\r\n }\r\n\r\n private _clearCommands(): void {\r\n this._commands.forEach((cmds: DrawCommands) => cmds.splice(0));\r\n this._layers.clear();\r\n }\r\n\r\n private initForPickOverlayDecorations(overlays: GraphicList): void {\r\n for (const overlay of overlays) {\r\n const gf = overlay as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n }\r\n\r\n public initForPickOverlays(sceneOverlays: GraphicList, worldOverlayDecorations: GraphicList | undefined, viewOverlayDecorations: GraphicList | undefined): void {\r\n this._clearCommands();\r\n\r\n this._addTranslucentAsOpaque = true;\r\n\r\n for (const sceneGf of sceneOverlays)\r\n (sceneGf as Graphic).addCommands(this);\r\n\r\n if (worldOverlayDecorations?.length) {\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n this.initForPickOverlayDecorations(worldOverlayDecorations);\r\n });\r\n }\r\n\r\n if (viewOverlayDecorations?.length) {\r\n this.pushAndPopState(this.target.decorationsState.withViewCoords(), () => {\r\n this.initForPickOverlayDecorations(viewOverlayDecorations);\r\n });\r\n }\r\n\r\n this._addTranslucentAsOpaque = false;\r\n }\r\n\r\n public initForReadPixels(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n // Set flag to force translucent geometry to be put into the opaque pass.\r\n this._addTranslucentAsOpaque = true;\r\n\r\n // Add the scene graphics.\r\n this.addGraphics(gfx.foreground);\r\n\r\n // Also add any pickable decorations.\r\n if (undefined !== gfx.decorations)\r\n this.addPickableDecorations(gfx.decorations);\r\n\r\n // Also background map is pickable\r\n this.addBackgroundMapGraphics(gfx.background);\r\n\r\n this._addTranslucentAsOpaque = false;\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public initForRender(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n this.addGraphics(gfx.foreground);\r\n this.addBackgroundMapGraphics(gfx.background);\r\n this.addOverlayGraphics(gfx.overlays);\r\n\r\n const dynamics = gfx.dynamics;\r\n if (dynamics && dynamics.length > 0)\r\n this.addDecorations(dynamics);\r\n\r\n const dec = gfx.decorations;\r\n if (undefined !== dec) {\r\n this.addBackground(dec.viewBackground as Graphic);\r\n\r\n this.addSkyBox(dec.skyBox as Graphic);\r\n\r\n if (undefined !== dec.normal && 0 < dec.normal.length)\r\n this.addGraphics(dec.normal);\r\n\r\n if (undefined !== dec.world && 0 < dec.world.length)\r\n this.addWorldDecorations(dec.world);\r\n\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)\r\n this.addDecorations(dec.viewOverlay, RenderPass.ViewOverlay);\r\n\r\n if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)\r\n this.addDecorations(dec.worldOverlay, RenderPass.WorldOverlay);\r\n });\r\n }\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public addPrimitive(prim: Primitive): void {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isGeometryOutsideActiveVolume(prim.cachedGeometry))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) { // See if we can cull this primitive.\r\n if (\"classification\" === prim.getPass(this.target)) {\r\n const geom = prim.cachedGeometry;\r\n geom.computeRange(this._scratchRange);\r\n let frustum = Frustum.fromRange(this._scratchRange, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const command = new PrimitiveCommand(prim);\r\n this.addPrimitiveCommand(command);\r\n\r\n if (RenderPass.None === this._forcedRenderPass && prim.isEdge) {\r\n const vf: ViewFlags = this.target.currentViewFlags;\r\n if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)\r\n this.getCommands(RenderPass.HiddenEdge).push(command);\r\n }\r\n }\r\n\r\n public addBranch(branch: Branch): void {\r\n this.pushAndPopBranch(branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n });\r\n }\r\n\r\n public computeBatchHiliteRenderPass(batch: Batch): RenderPass {\r\n let pass = RenderPass.Hilite;\r\n if (batch.graphic instanceof MeshGraphic) {\r\n const mg = batch.graphic;\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (batch.graphic instanceof GraphicsArray) {\r\n const ga = batch.graphic;\r\n if (ga.graphics[0] instanceof MeshGraphic) {\r\n const mg = ga.graphics[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (ga.graphics[0] instanceof Branch) {\r\n const b = ga.graphics[0];\r\n if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof MeshGraphic) {\r\n const mg = b.branch.entries[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n }\r\n }\r\n }\r\n return pass;\r\n }\r\n\r\n public addBatch(batch: Batch): void {\r\n if (batch.locateOnly && !this.target.isReadPixelsInProgress)\r\n return;\r\n\r\n // Batches (aka element tiles) should only draw during ordinary (translucent or opaque) passes.\r\n // They may draw during both, or neither.\r\n // NB: This is no longer true - pickable overlay decorations are defined as Batches. Problem?\r\n // assert(RenderPass.None === this._forcedRenderPass);\r\n assert(!this._opaqueOverrides && !this._translucentOverrides);\r\n assert(undefined === this._curBatch);\r\n\r\n // If all features are overridden to be invisible, draw no graphics in this batch\r\n const overrides = batch.getOverrides(this.target);\r\n if (overrides.allHidden)\r\n return;\r\n\r\n if (!batch.range.isNull) {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isRangeOutsideActiveVolume(batch.range))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) {\r\n let frustum = Frustum.fromRange(batch.range, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const classifier = this._stack.top.planarClassifier;\r\n\r\n this._batchState.push(batch, true);\r\n\r\n this.pushAndPop(new PushBatchCommand(batch), PopBatchCommand.instance, () => {\r\n if (this.currentViewFlags.transparency || overrides.anyViewIndependentTranslucent) {\r\n this._opaqueOverrides = overrides.anyOpaque;\r\n this._translucentOverrides = overrides.anyTranslucent;\r\n\r\n if (undefined !== classifier) {\r\n this._opaqueOverrides = this._opaqueOverrides || classifier.anyOpaque;\r\n this._translucentOverrides = this._translucentOverrides || classifier.anyTranslucent;\r\n }\r\n }\r\n\r\n // If we have an active volume classifier then force all batches for the reality data being classified into a special render pass.\r\n let savedForcedRenderPass = RenderPass.None;\r\n if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {\r\n savedForcedRenderPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.VolumeClassifiedRealityData;\r\n }\r\n\r\n (batch.graphic as Graphic).addCommands(this);\r\n\r\n if (RenderPass.VolumeClassifiedRealityData === this._forcedRenderPass)\r\n this._forcedRenderPass = savedForcedRenderPass;\r\n\r\n // If the batch contains hilited features, need to render them in the hilite pass\r\n const anyHilited = overrides.anyHilited;\r\n const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;\r\n if (anyHilited || planarClassifierHilited)\r\n (batch.graphic as Graphic).addHiliteCommands(this, planarClassifierHilited ? RenderPass.HilitePlanarClassification : this.computeBatchHiliteRenderPass(batch));\r\n\r\n });\r\n\r\n this._opaqueOverrides = this._translucentOverrides = false;\r\n this._batchState.pop();\r\n }\r\n\r\n // Define a culling frustum. Commands associated with Graphics whose ranges do not intersect the frustum will be skipped.\r\n public setCheckRange(frustum: Frustum) { this._frustumPlanes = FrustumPlanes.fromFrustum(frustum); }\r\n // Clear the culling frustum.\r\n public clearCheckRange(): void { this._frustumPlanes = undefined; }\r\n\r\n private setupClassificationByVolume(): void {\r\n // To make it easier to process the classifiers individually, set up a secondary command list for them where they\r\n // are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports\r\n // nested branches and batches.\r\n const groupedCmds = this._commands[RenderPass.Classification];\r\n const byIndexCmds = this._commands[RenderPass.ClassificationByIndex];\r\n const pushCommands: DrawCommands = []; // will contain current set of pushes ahead of a primitive\r\n for (const cmd of groupedCmds) {\r\n switch (cmd.opcode) {\r\n case \"pushBranch\":\r\n case \"pushBatch\":\r\n case \"pushState\":\r\n pushCommands.push(cmd);\r\n break;\r\n case \"drawPrimitive\":\r\n for (const pushCmd of pushCommands) {\r\n byIndexCmds.push(pushCmd);\r\n }\r\n byIndexCmds.push(cmd);\r\n for (let i = pushCommands.length - 1; i >= 0; --i) {\r\n if (\"pushBatch\" === pushCommands[i].opcode)\r\n byIndexCmds.push(PopBatchCommand.instance);\r\n else // should be eith pushBranch or pushState opcode\r\n byIndexCmds.push(PopBranchCommand.instance);\r\n }\r\n break;\r\n case \"popBatch\":\r\n case \"popBranch\":\r\n pushCommands.pop();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n public dump(): Array<{ name: string, count: number }> {\r\n const dump = [\r\n { name: \"Primitives\", count: 0 },\r\n { name: \"Batches\", count: 0 },\r\n { name: \"Branches\", count: 0 },\r\n ];\r\n\r\n for (const cmds of this._commands) {\r\n for (const cmd of cmds) {\r\n let index;\r\n switch (cmd.opcode) {\r\n case \"drawPrimitive\":\r\n index = 0;\r\n break;\r\n case \"pushBatch\":\r\n index = 1;\r\n break;\r\n case \"pushBranch\":\r\n index = 2;\r\n break;\r\n default:\r\n continue;\r\n }\r\n\r\n dump[index].count++;\r\n }\r\n }\r\n\r\n return dump;\r\n }\r\n}\r\n"]}
|
|
@@ -12,23 +12,24 @@ export declare const enum RenderPass {
|
|
|
12
12
|
OpaqueLayers = 1,
|
|
13
13
|
OpaqueLinear = 2,
|
|
14
14
|
OpaquePlanar = 3,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
PointClouds = 4,
|
|
16
|
+
OpaqueGeneral = 5,
|
|
17
|
+
Classification = 6,
|
|
18
|
+
TranslucentLayers = 7,
|
|
19
|
+
Translucent = 8,
|
|
20
|
+
HiddenEdge = 9,
|
|
21
|
+
Hilite = 10,
|
|
22
|
+
OverlayLayers = 11,
|
|
23
|
+
WorldOverlay = 12,
|
|
24
|
+
ViewOverlay = 13,
|
|
25
|
+
SkyBox = 14,
|
|
26
|
+
BackgroundMap = 15,
|
|
27
|
+
HiliteClassification = 16,
|
|
28
|
+
ClassificationByIndex = 17,
|
|
29
|
+
HilitePlanarClassification = 18,
|
|
30
|
+
PlanarClassification = 19,
|
|
31
|
+
VolumeClassifiedRealityData = 20,
|
|
32
|
+
COUNT = 21
|
|
32
33
|
}
|
|
33
34
|
/** Describes the [[RenderPass]]es in which a [[Primitive]] wants to be rendered.
|
|
34
35
|
* Generally, each Pass corresponds to a single RenderPass. However a couple of passes specify that the primitive should be rendered
|
|
@@ -43,6 +44,7 @@ export declare type Pass = "skybox" | // SkyBox
|
|
|
43
44
|
"opaque-linear" | // OpaqueLinear
|
|
44
45
|
"opaque-planar" | // OpaquePlanar
|
|
45
46
|
"translucent" | // Translucent
|
|
47
|
+
"point-clouds" | // PointClouds
|
|
46
48
|
"view-overlay" | // ViewOverlay
|
|
47
49
|
"classification" | // Classification
|
|
48
50
|
"none" | // None
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderFlags.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderFlags.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH;;;;GAIG;AACH,0BAAkB,UAAU;IAC1B,IAAI,MAAO;IACX,UAAU,IAAI;IACd,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,aAAa,IAAA;IACb,cAAc,IAAA;IACd,iBAAiB,IAAA;IACjB,WAAW,IAAA;IACX,UAAU,IAAA;IACV,MAAM,
|
|
1
|
+
{"version":3,"file":"RenderFlags.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderFlags.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,13 +12,14 @@ export var Pass;
|
|
|
12
12
|
/** Return the RenderPass corresponding to the specified Pass. */
|
|
13
13
|
function toRenderPass(pass) {
|
|
14
14
|
switch (pass) {
|
|
15
|
-
case "skybox": return
|
|
16
|
-
case "opaque": return
|
|
15
|
+
case "skybox": return 14 /* SkyBox */;
|
|
16
|
+
case "opaque": return 5 /* OpaqueGeneral */;
|
|
17
17
|
case "opaque-linear": return 2 /* OpaqueLinear */;
|
|
18
18
|
case "opaque-planar": return 3 /* OpaquePlanar */;
|
|
19
|
-
case "translucent": return
|
|
20
|
-
case "
|
|
21
|
-
case "
|
|
19
|
+
case "translucent": return 8 /* Translucent */;
|
|
20
|
+
case "point-clouds": return 4 /* PointClouds */;
|
|
21
|
+
case "view-overlay": return 13 /* ViewOverlay */;
|
|
22
|
+
case "classification": return 6 /* Classification */;
|
|
22
23
|
case "none": return 255 /* None */;
|
|
23
24
|
}
|
|
24
25
|
}
|
|
@@ -47,6 +48,7 @@ export var Pass;
|
|
|
47
48
|
case "opaque":
|
|
48
49
|
case "opaque-planar":
|
|
49
50
|
case "opaque-linear":
|
|
51
|
+
case "point-clouds":
|
|
50
52
|
return true;
|
|
51
53
|
default:
|
|
52
54
|
return false;
|
|
@@ -59,7 +61,7 @@ export var Pass;
|
|
|
59
61
|
}
|
|
60
62
|
Pass.rendersOpaqueAndTranslucent = rendersOpaqueAndTranslucent;
|
|
61
63
|
function toOpaquePass(pass) {
|
|
62
|
-
return "opaque-translucent" === pass ?
|
|
64
|
+
return "opaque-translucent" === pass ? 5 /* OpaqueGeneral */ : 3 /* OpaquePlanar */;
|
|
63
65
|
}
|
|
64
66
|
Pass.toOpaquePass = toOpaquePass;
|
|
65
67
|
})(Pass || (Pass = {}));
|